[Pkg-alsa-devel] [Debian ALSA CVS] debian/alsa-utils (70 files)

David B Harris dbharris-guest@quantz.debian.org
Tue, 03 Feb 2004 20:52:01 +0100


    Date: Tuesday, February 3, 2004 @ 20:52:01
  Author: dbharris-guest
    Path: /cvsroot/pkg-alsa/debian/alsa-utils

Modified: COPYING ChangeLog INSTALL Makefile.am Makefile.in README TODO
          acinclude.m4 aclocal.m4 alsaconf/Makefile.am
          alsaconf/Makefile.in alsaconf/alsaconf.8 alsaconf/alsaconf.in
          alsactl/Makefile.am alsactl/Makefile.in alsactl/alsactl.1
          alsactl/alsactl.c alsamixer/Makefile.am alsamixer/Makefile.in
          alsamixer/README alsamixer/alsamixer.1 alsamixer/alsamixer.c
          amidi/Makefile.am amidi/Makefile.in amidi/amidi.1 amidi/amidi.c
          amixer/Makefile.am amixer/Makefile.in amixer/amixer.1
          amixer/amixer.c amixer/amixer.h aplay/Makefile.am
          aplay/Makefile.in aplay/aplay.1 aplay/aplay.c aplay/arecord.1
          aplay/formats.h configure configure.in cvscompile debian/rules
          depcomp iecset/Makefile.am iecset/Makefile.in iecset/iecbits.c
          iecset/iecset.1 iecset/iecset.c include/Makefile.am
          include/Makefile.in include/aconfig.h.in include/version.h
          install-sh missing mkinstalldirs seq/Makefile.am seq/Makefile.in
          seq/aconnect/Makefile.am seq/aconnect/Makefile.in
          seq/aconnect/README.aconnect seq/aconnect/aconnect.1
          seq/aconnect/aconnect.c seq/aseqnet/Makefile.am
          seq/aseqnet/Makefile.in seq/aseqnet/README.aseqnet
          seq/aseqnet/aseqnet.1 seq/aseqnet/aseqnet.c utils/Makefile.am
          utils/Makefile.in utils/alsa-utils.spec.in utils/buildrpm

Re-import latest alsa-utils release, hopefully


------------------------------+
 COPYING                      |  340 +++
 ChangeLog                    |   38 
 INSTALL                      |   37 
 Makefile.am                  |   14 
 Makefile.in                  |  391 +++
 README                       |   17 
 TODO                         |    4 
 acinclude.m4                 |   12 
 aclocal.m4                   |  717 +++++++
 alsaconf/Makefile.am         |    3 
 alsaconf/Makefile.in         |  337 +++
 alsaconf/alsaconf.8          |   88 
 alsaconf/alsaconf.in         | 1112 +++++++++++
 alsactl/Makefile.am          |    5 
 alsactl/Makefile.in          |  355 +++
 alsactl/alsactl.1            |   78 
 alsactl/alsactl.c            | 1385 +++++++++++++
 alsamixer/Makefile.am        |    9 
 alsamixer/Makefile.in        |  359 +++
 alsamixer/README             |   84 
 alsamixer/alsamixer.1        |  112 +
 alsamixer/alsamixer.c        | 2055 ++++++++++++++++++++
 amidi/Makefile.am            |    5 
 amidi/Makefile.in            |  446 ++++
 amidi/amidi.1                |  151 +
 amidi/amidi.c                |  558 +++++
 amixer/Makefile.am           |   10 
 amixer/Makefile.in           |  362 +++
 amixer/amixer.1              |  127 +
 amixer/amixer.c              | 1548 +++++++++++++++
 amixer/amixer.h              |   21 
 aplay/Makefile.am            |   29 
 aplay/Makefile.in            |  385 +++
 aplay/aplay.1                |  143 +
 aplay/aplay.c                | 2055 ++++++++++++++++++++
 aplay/arecord.1              |  143 +
 aplay/formats.h              |  110 +
 configure                    | 4085 +++++++++++++++++++++++++++++++++++++++++
 configure.in                 |   42 
 cvscompile                   |   15 
 debian/rules                 |   11 
 depcomp                      |  411 ++++
 iecset/Makefile.am           |    9 
 iecset/Makefile.in           |  451 ++++
 iecset/iecbits.c             |  213 ++
 iecset/iecset.1              |  100 +
 iecset/iecset.c              |  400 ++++
 include/Makefile.am          |   25 
 include/Makefile.in          |  281 ++
 include/aconfig.h.in         |   23 
 include/version.h            |   12 
 install-sh                   |  251 ++
 missing                      |  283 ++
 mkinstalldirs                |   40 
 seq/Makefile.am              |    1 
 seq/Makefile.in              |  315 +++
 seq/aconnect/Makefile.am     |    6 
 seq/aconnect/Makefile.in     |  356 +++
 seq/aconnect/README.aconnect |   46 
 seq/aconnect/aconnect.1      |  138 +
 seq/aconnect/aconnect.c      |  402 ++++
 seq/aseqnet/Makefile.am      |    6 
 seq/aseqnet/Makefile.in      |  356 +++
 seq/aseqnet/README.aseqnet   |   53 
 seq/aseqnet/aseqnet.1        |   81 
 seq/aseqnet/aseqnet.c        |  600 ++++++
 utils/Makefile.am            |    4 
 utils/Makefile.in            |  203 ++
 utils/alsa-utils.spec.in     |   63 
 utils/buildrpm               |   42 
 70 files changed, 22962 insertions(+), 7 deletions(-)


Index: debian/alsa-utils/COPYING
diff -u debian/alsa-utils/COPYING:1.3 debian/alsa-utils/COPYING:1.4
--- debian/alsa-utils/COPYING:1.3	Tue Feb  3 20:21:43 2004
+++ debian/alsa-utils/COPYING	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 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.
+
+  <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.
Index: debian/alsa-utils/ChangeLog
diff -u debian/alsa-utils/ChangeLog:1.3 debian/alsa-utils/ChangeLog:1.4
--- debian/alsa-utils/ChangeLog:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/ChangeLog	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,38 @@
+0.0.7 -> 0.2.0
+
+* removed error message from alsamixer
+* fixes in alsactl program
+* version is now compatible with driver
+
+0.0.6 -> 0.0.7
+
+* added alsactl control program
+* updated alsamixer by Carl van Schaik <carl@dreamcoat.che.uct.ac.za>
+  - stereo record source select
+  - left/right route support
+
+0.0.5 -> 0.0.6
+
+* updates for new alsa-lib
+* fixed compilation problems with config.h header file
+* updated output 'aplay -l'
+
+0.0.3 -> 0.0.4
+
+* added check for alsa-lib package
+* added spec file for RPM
+
+0.0.2 -> 0.0.3
+
+* included great ncurses alsamixer from Tim Janik <timj@gtk.org>
+* enhanced Mixer from Andy Lo A Foe <arloafoe@cs.vu.nl> renamed to amixer
+
+0.0.1 -> 0.0.2
+
+* fixed small bug in aplay in command line parsing
+* fixed fragment size allocation for low rate files in aplay
+* a little bit corrected output from Mixer
+
+0.0.1
+
+* initial release (aplay, broken Mixer)
Index: debian/alsa-utils/INSTALL
diff -u debian/alsa-utils/INSTALL:1.3 debian/alsa-utils/INSTALL:1.4
--- debian/alsa-utils/INSTALL:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/INSTALL	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,37 @@
+
+			ALSA utils installation
+			=======================
+
+Installation
+------------
+
+For installation you can use these commands:
+
+	./configure
+	make install
+
+If ./configure command complain that alsa-lib package isn't installed,
+please, check if --prefix option is same for alsa-lib and alsa-utils
+package. The configure script from alsa-utils package probably cannot find
+header file asoundlib.h in $prefix/include/sys directory (usually in
+/usr/include/sys directory).
+
+Compilation from CVS sources
+----------------------------
+
+You need also GNU packages autoconf and automake installed in your system
+to compile CVS sources of alsa-utils package.
+
+For compilation you can use these commands:
+
+	aclocal
+	autoheader
+	automake --foreign --copy --add-missing
+	autoconf
+	./configure
+	make
+
+The included cvscompile script does this job for you.
+
+Note: Some automake packages have missing aclocal program. Use newer version
+      in the case.
Index: debian/alsa-utils/Makefile.am
diff -u debian/alsa-utils/Makefile.am:1.3 debian/alsa-utils/Makefile.am:1.4
--- debian/alsa-utils/Makefile.am:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/Makefile.am	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,14 @@
+INCLUDES=-I$(top_srcdir)/include
+SUBDIRS=include alsactl alsamixer amixer aplay seq utils
+EXTRA_DIST=ChangeLog INSTALL TODO README configure cvscompile depcomp
+
+rpm: dist
+	$(MAKE) -C $@
+
+dist-hook:
+	-chmod -R a+r $(distdir)
+	@if ! test -z "$(AMTAR)"; then \
+		$(AMTAR) --create --verbose --file=- $(distdir) | bzip2 -c -9 > $(distdir).tar.bz2 ; \
+	else \
+		$(TAR) --create --verbose --file=- $(distdir) | bzip2 -c -9 > $(distdir).tar.bz2 ; \
+	fi
Index: debian/alsa-utils/Makefile.in
diff -u debian/alsa-utils/Makefile.in:1.3 debian/alsa-utils/Makefile.in:1.4
--- debian/alsa-utils/Makefile.in:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/Makefile.in	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,391 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+INCLUDES = -I$(top_srcdir)/include
+SUBDIRS = include alsactl alsamixer amixer aplay seq utils
+EXTRA_DIST = ChangeLog INSTALL TODO README configure cvscompile depcomp
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
+	uninstall-info-recursive all-recursive install-data-recursive \
+	install-exec-recursive installdirs-recursive install-recursive \
+	uninstall-recursive check-recursive installcheck-recursive
+DIST_COMMON = README COPYING ChangeLog INSTALL Makefile.am Makefile.in \
+	TODO acinclude.m4 aclocal.m4 configure configure.in install-sh \
+	missing mkinstalldirs
+DIST_SUBDIRS = $(SUBDIRS)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$@ $(SHELL) ./config.status
+
+$(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)
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $(MAKEFLAGS); amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $(MAKEFLAGS); amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = .
+# Avoid unsightly `./'.
+distdir = $(PACKAGE)-$(VERSION)
+
+GZIP_ENV = --best
+
+distdir: $(DISTFILES)
+	-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
+	mkdir $(distdir)
+	$(mkinstalldirs) $(distdir)/utils
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	for subdir in $(SUBDIRS); do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d $(distdir)/$$subdir \
+	    || mkdir $(distdir)/$$subdir \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$(top_distdir)" \
+	        distdir=../$(distdir)/$$subdir \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="${top_distdir}" distdir="$(distdir)" \
+	  dist-hook
+	-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: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(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
+	-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(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=`CDPATH=: && cd $(distdir)/=inst && pwd` \
+	  && cd $(distdir)/=build \
+	  && ../configure --srcdir=.. --prefix=$$dc_install_base \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
+	     || (echo "Error: files left after uninstall" 1>&2; \
+	         exit 1) ) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && $(MAKE) $(AM_MAKEFLAGS) distclean \
+	  && rm -f $(distdir).tar.gz \
+	  && (test `find . -type f -print | wc -l` -eq 0 \
+	     || (echo "Error: files left after distclean" 1>&2; \
+	         exit 1) )
+	-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
+	@echo "$(distdir).tar.gz is ready for distribution" | \
+	  sed 'h;s/./=/g;p;x;p;x'
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+dist-all: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
+distclean: distclean-recursive
+	-rm -f config.status config.cache config.log
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
+	clean-generic clean-recursive dist dist-all distcheck distclean \
+	distclean-generic distclean-recursive distclean-tags distdir \
+	dvi dvi-am dvi-recursive info info-am info-recursive install \
+	install-am install-data install-data-am install-data-recursive \
+	install-exec install-exec-am install-exec-recursive \
+	install-info install-info-am install-info-recursive install-man \
+	install-recursive install-strip installcheck installcheck-am \
+	installdirs installdirs-am installdirs-recursive \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-recursive tags tags-recursive uninstall \
+	uninstall-am uninstall-info-am uninstall-info-recursive \
+	uninstall-recursive
+
+
+rpm: dist
+	$(MAKE) -C $@
+
+dist-hook:
+	-chmod -R a+r $(distdir)
+	@if ! test -z "$(AMTAR)"; then \
+		$(AMTAR) --create --verbose --file=- $(distdir) | bzip2 -c -9 > $(distdir).tar.bz2 ; \
+	else \
+		$(TAR) --create --verbose --file=- $(distdir) | bzip2 -c -9 > $(distdir).tar.bz2 ; \
+	fi
+# 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:
Index: debian/alsa-utils/README
diff -u debian/alsa-utils/README:1.3 debian/alsa-utils/README:1.4
--- debian/alsa-utils/README:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/README	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,17 @@
+
+		Advanced Linux Sound Architecture - Utilities
+		=============================================
+
+This package contains the command line utilities for the ALSA project.
+The package can be compiled only with the installed ALSA driver and
+the ALSA C library.
+
+alsactl		- an utility for soundcard settings management
+aplay/arecord	- an utility for the playback / capture of .wav,.voc,.au files
+amixer		- a command line mixer
+alsamixer	- a ncurses mixer
+
+You may give a look for more information about the ALSA project to URL
+http://www.alsa-project.org.
+
+					Jaroslav Kysela <perex@suse.cz>
Index: debian/alsa-utils/TODO
diff -u debian/alsa-utils/TODO:1.3 debian/alsa-utils/TODO:1.4
--- debian/alsa-utils/TODO:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/TODO	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,4 @@
+H add options to aplay to avoid xrun using arecord | aplay
+M Rewrite aplay/arecord tool and separate the experimental stuff
+M Write a *good* mixer
+L Add support for OSS setups to alsactl
Index: debian/alsa-utils/acinclude.m4
diff -u debian/alsa-utils/acinclude.m4:1.3 debian/alsa-utils/acinclude.m4:1.4
--- debian/alsa-utils/acinclude.m4:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/acinclude.m4	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,12 @@
+AC_DEFUN(SAVE_UTIL_VERSION, [
+SND_UTIL_VERSION=$VERSION
+echo $VERSION > $srcdir/version
+AC_DEFINE_UNQUOTED(VERSION, "$SND_UTIL_VERSION", [ALSA util version])
+AC_SUBST(SND_UTIL_VERSION)
+SND_UTIL_MAJOR=`echo $VERSION | cut -d . -f 1`
+AC_SUBST(SND_UTIL_MAJOR)
+SND_UTIL_MINOR=`echo $VERSION | cut -d . -f 2`
+AC_SUBST(SND_UTIL_MINOR)
+SND_UTIL_SUBMINOR=`echo $VERSION | cut -d . -f 3 | sed -e 's/pre[[0-9]]*//g'`
+AC_SUBST(SND_UTIL_SUBMINOR)
+])
Index: debian/alsa-utils/aclocal.m4
diff -u debian/alsa-utils/aclocal.m4:1.3 debian/alsa-utils/aclocal.m4:1.4
--- debian/alsa-utils/aclocal.m4:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/aclocal.m4	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,717 @@
+# aclocal.m4 generated automatically by aclocal 1.5
+
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001
+# 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.
+
+AC_DEFUN(SAVE_UTIL_VERSION, [
+SND_UTIL_VERSION=$VERSION
+echo $VERSION > $srcdir/version
+AC_DEFINE_UNQUOTED(VERSION, "$SND_UTIL_VERSION", [ALSA util version])
+AC_SUBST(SND_UTIL_VERSION)
+SND_UTIL_MAJOR=`echo $VERSION | cut -d . -f 1`
+AC_SUBST(SND_UTIL_MAJOR)
+SND_UTIL_MINOR=`echo $VERSION | cut -d . -f 2`
+AC_SUBST(SND_UTIL_MINOR)
+SND_UTIL_SUBMINOR=`echo $VERSION | cut -d . -f 3 | sed -e 's/pre[[0-9]]*//g'`
+AC_SUBST(SND_UTIL_SUBMINOR)
+])
+
+# Do all the work for Automake.  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.
+
+# serial 5
+
+# 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...
+
+
+# We require 2.13 because we rely on SHELL being computed by configure.
+AC_PREREQ([2.13])
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If MACRO-NAME is provided do IF-PROVIDED, else IF-NOT-PROVIDED.
+# The purpose of this macro is to provide the user with a means to
+# check macros which are provided without letting her know how the
+# information is coded.
+# If this macro is not defined by Autoconf, define it here.
+ifdef([AC_PROVIDE_IFELSE],
+      [],
+      [define([AC_PROVIDE_IFELSE],
+              [ifdef([AC_PROVIDE_$1],
+                     [$2], [$3])])])
+
+
+# AM_INIT_AUTOMAKE(PACKAGE,VERSION, [NO-DEFINE])
+# ----------------------------------------------
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`CDPATH=:; cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])
+fi
+
+# Define the identity of the package.
+PACKAGE=$1
+AC_SUBST(PACKAGE)dnl
+VERSION=$2
+AC_SUBST(VERSION)dnl
+ifelse([$3],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])
+
+# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
+# the ones we care about.
+ifdef([m4_pattern_allow],
+      [m4_pattern_allow([^AM_[A-Z]+FLAGS])])dnl
+
+# Autoconf 2.50 always computes EXEEXT.  However we need to be
+# compatible with 2.13, for now.  So we always define EXEEXT, but we
+# don't compute it.
+AC_SUBST(EXEEXT)
+# Similar for OBJEXT -- only we only use OBJEXT if the user actually
+# requests that it be used.  This is a bit dumb.
+: ${OBJEXT=o}
+AC_SUBST(OBJEXT)
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal)
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake)
+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
+AC_REQUIRE([AM_DEP_TRACK])dnl
+AC_REQUIRE([AM_SET_DEPDIR])dnl
+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
+])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+# 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)])
+
+
+# serial 2
+
+# 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=
+  am_backtick='`'
+  AC_MSG_WARN([${am_backtick}missing' script is too old or missing])
+fi
+])
+
+# AM_AUX_DIR_EXPAND
+
+# 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.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND], [
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`CDPATH=:; cd $ac_aux_dir && pwd`
+])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+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)])
+
+# 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
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# serial 4						-*- Autoconf -*-
+
+
+
+# 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" 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 conftest.c -o conftest.o >/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
+])
+$1DEPMODE="depmode=$am_cv_$1_dependencies_compiler_type"
+AC_SUBST([$1DEPMODE])
+])
+
+
+# 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])
+pushdef([subst], defn([AC_SUBST]))
+subst(AMDEPBACKSLASH)
+popdef([subst])
+])
+
+# Generate code to set up dependency tracking.
+# This macro should only be invoked once -- use via AC_REQUIRE.
+# Usage:
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+
+#
+# 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_OUTPUT_COMMANDS([
+test x"$AMDEP_TRUE" != x"" ||
+for mf in $CONFIG_FILES; do
+  case "$mf" in
+  Makefile) dirpart=.;;
+  */Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;;
+  *) continue;;
+  esac
+  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=`echo "$file" | sed -e 's|/[^/]*$||'`
+    $ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+], [AMDEP_TRUE="$AMDEP_TRUE"
+ac_aux_dir="$ac_aux_dir"])])
+
+# 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 | fgrep -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
+])
+
+# serial 3
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+#
+# FIXME: Once using 2.50, use this:
+# m4_match([$1], [^TRUE\|FALSE$], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_DEFUN([AM_CONDITIONAL],
+[ifelse([$1], [TRUE],
+        [errprint(__file__:__line__: [$0: invalid condition: $1
+])dnl
+m4exit(1)])dnl
+ifelse([$1], [FALSE],
+       [errprint(__file__:__line__: [$0: invalid condition: $1
+])dnl
+m4exit(1)])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi])
+
+dnl Configure Paths for Alsa
+dnl Some modifications by Richard Boulton <richard-alsa@tartarus.org>
+dnl Christopher Lansdown <lansdoct@cs.alfred.edu>
+dnl Jaroslav Kysela <perex@suse.cz>
+dnl Last modification: alsa.m4,v 1.22 2002/05/27 11:14:20 tiwai Exp
+dnl AM_PATH_ALSA([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate.
+dnl enables arguments --with-alsa-prefix=
+dnl                   --with-alsa-enc-prefix=
+dnl                   --disable-alsatest  (this has no effect, as yet)
+dnl
+dnl For backwards compatibility, if ACTION_IF_NOT_FOUND is not specified,
+dnl and the alsa libraries are not found, a fatal AC_MSG_ERROR() will result.
+dnl
+AC_DEFUN(AM_PATH_ALSA,
+[dnl Save the original CFLAGS, LDFLAGS, and LIBS
+alsa_save_CFLAGS="$CFLAGS"
+alsa_save_LDFLAGS="$LDFLAGS"
+alsa_save_LIBS="$LIBS"
+alsa_found=yes
+
+dnl
+dnl Get the cflags and libraries for alsa
+dnl
+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=""])
+
+dnl FIXME: this is not yet implemented
+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"
+	LDFLAGS="$LDFLAGS $ALSA_LIBS"
+fi
+
+dnl add the alsa library
+ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread"
+LIBS=`echo $LIBS | sed 's/-lm//'`
+LIBS=`echo $LIBS | sed 's/-ldl//'`
+LIBS=`echo $LIBS | sed 's/-lpthread//'`
+LIBS=`echo $LIBS | sed 's/  //'`
+LIBS="$ALSA_LIBS $LIBS"
+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_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILE([
+#include <alsa/asoundlib.h>
+], [
+/* 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.)],
+  [AC_MSG_RESULT(not present.)
+   ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)])
+   alsa_found=no]
+)
+AC_LANG_RESTORE
+
+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],,
+	[ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)])
+	 alsa_found=no]
+)
+
+if test "x$alsa_found" = "xyes" ; then
+   ifelse([$2], , :, [$2])
+   LIBS=`echo $LIBS | sed 's/-lasound//g'`
+   LIBS=`echo $LIBS | sed 's/  //'`
+   LIBS="-lasound $LIBS"
+fi
+if test "x$alsa_found" = "xno" ; then
+   ifelse([$3], , :, [$3])
+   CFLAGS="$alsa_save_CFLAGS"
+   LDFLAGS="$alsa_save_LDFLAGS"
+   LIBS="$alsa_save_LIBS"
+   ALSA_CFLAGS=""
+   ALSA_LIBS=""
+fi
+
+dnl That should be it.  Now just export out symbols:
+AC_SUBST(ALSA_CFLAGS)
+AC_SUBST(ALSA_LIBS)
+])
+
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+# serial 3
+
+# 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.  We must strip everything past the first ":",
+# and everything past the last "/".
+
+AC_PREREQ([2.12])
+
+AC_DEFUN([AM_CONFIG_HEADER],
+[ifdef([AC_FOREACH],dnl
+	 [dnl init our file count if it isn't already
+	 m4_ifndef([_AM_Config_Header_Index], m4_define([_AM_Config_Header_Index], [0]))
+	 dnl prepare to store our destination file list for use in config.status
+	 AC_FOREACH([_AM_File], [$1],
+		    [m4_pushdef([_AM_Dest], m4_patsubst(_AM_File, [:.*]))
+		    m4_define([_AM_Config_Header_Index], m4_incr(_AM_Config_Header_Index))
+		    dnl and add it to the list of files AC keeps track of, along
+		    dnl with our hook
+		    AC_CONFIG_HEADERS(_AM_File,
+dnl COMMANDS, [, INIT-CMDS]
+[# update the timestamp
+echo timestamp >"AS_ESCAPE(_AM_DIRNAME(]_AM_Dest[))/stamp-h]_AM_Config_Header_Index["
+][$2]m4_ifval([$3], [, [$3]]))dnl AC_CONFIG_HEADERS
+		    m4_popdef([_AM_Dest])])],dnl
+[AC_CONFIG_HEADER([$1])
+  AC_OUTPUT_COMMANDS(
+   ifelse(patsubst([$1], [[^ ]], []),
+	  [],
+	  [test -z "$CONFIG_HEADERS" || echo timestamp >dnl
+	   patsubst([$1], [^\([^:]*/\)?.*], [\1])stamp-h]),dnl
+[am_indx=1
+for am_file in $1; do
+  case " \$CONFIG_HEADERS " in
+  *" \$am_file "*)
+    am_dir=\`echo \$am_file |sed 's%:.*%%;s%[^/]*\$%%'\`
+    if test -n "\$am_dir"; then
+      am_tmpdir=\`echo \$am_dir |sed 's%^\(/*\).*\$%\1%'\`
+      for am_subdir in \`echo \$am_dir |sed 's%/% %'\`; do
+        am_tmpdir=\$am_tmpdir\$am_subdir/
+        if test ! -d \$am_tmpdir; then
+          mkdir \$am_tmpdir
+        fi
+      done
+    fi
+    echo timestamp > "\$am_dir"stamp-h\$am_indx
+    ;;
+  esac
+  am_indx=\`expr \$am_indx + 1\`
+done])
+])]) # AM_CONFIG_HEADER
+
+# _AM_DIRNAME(PATH)
+# -----------------
+# Like AS_DIRNAME, only do it during macro expansion
+AC_DEFUN([_AM_DIRNAME],
+       [m4_if(m4_regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1,
+	      m4_if(m4_regexp([$1], [^//\([^/]\|$\)]), -1,
+		    m4_if(m4_regexp([$1], [^/.*]), -1,
+			  [.],
+			  m4_patsubst([$1], [^\(/\).*], [\1])),
+		    m4_patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])),
+	      m4_patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl
+]) # _AM_DIRNAME
+
Index: debian/alsa-utils/alsaconf/Makefile.am
diff -u debian/alsa-utils/alsaconf/Makefile.am:1.3 debian/alsa-utils/alsaconf/Makefile.am:1.4
--- debian/alsa-utils/alsaconf/Makefile.am:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/alsaconf/Makefile.am	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,3 @@
+sbin_SCRIPTS = alsaconf
+man_MANS = alsaconf.8
+EXTRA_DIST = alsaconf.8
Index: debian/alsa-utils/alsaconf/Makefile.in
diff -u debian/alsa-utils/alsaconf/Makefile.in:1.3 debian/alsa-utils/alsaconf/Makefile.in:1.4
--- debian/alsa-utils/alsaconf/Makefile.in:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/alsaconf/Makefile.in	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,337 @@
+# Makefile.in generated by automake 1.7.5b from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+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@
+ALSAMIXER_FALSE = @ALSAMIXER_FALSE@
+ALSAMIXER_TRUE = @ALSAMIXER_TRUE@
+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@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+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@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+STRIP = @STRIP@
+TESTSOUND = @TESTSOUND@
+VERSION = @VERSION@
+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__leading_dot = @am__leading_dot@
+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@
+sbin_SCRIPTS = alsaconf
+man_MANS = alsaconf.8
+EXTRA_DIST = alsaconf.8
+subdir = alsaconf
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES = alsaconf
+SCRIPTS = $(sbin_SCRIPTS)
+
+DIST_SOURCES =
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in alsaconf.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  alsaconf/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+alsaconf: $(top_builddir)/config.status alsaconf.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+install-sbinSCRIPTS: $(sbin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(sbindir)
+	@list='$(sbin_SCRIPTS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f $$d$$p; then \
+	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	    echo " $(sbinSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(sbindir)/$$f"; \
+	    $(sbinSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(sbindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-sbinSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_SCRIPTS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	  echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
+	  rm -f $(DESTDIR)$(sbindir)/$$f; \
+	done
+uninstall-info-am:
+
+man8dir = $(mandir)/man8
+install-man8: $(man8_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(man8dir)
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) 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 \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  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)$(man8dir)/$$inst"; \
+	  $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
+	done
+uninstall-man8:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.8*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    8*) ;; \
+	    *) ext='8' ;; \
+	  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)$(man8dir)/$$inst"; \
+	  rm -f $(DESTDIR)$(man8dir)/$$inst; \
+	done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@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
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(MANS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(man8dir)
+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:
+
+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."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-sbinSCRIPTS
+
+install-info: install-info-am
+
+install-man: install-man8
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-man uninstall-sbinSCRIPTS
+
+uninstall-man: uninstall-man8
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-man8 install-sbinSCRIPTS install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
+	uninstall-man uninstall-man8 uninstall-sbinSCRIPTS
+
+# 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:
Index: debian/alsa-utils/alsaconf/alsaconf.8
diff -u debian/alsa-utils/alsaconf/alsaconf.8:1.3 debian/alsa-utils/alsaconf/alsaconf.8:1.4
--- debian/alsa-utils/alsaconf/alsaconf.8:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/alsaconf/alsaconf.8	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,88 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" alsaconf.8 is copyright 2003 by Jordi Mallach <jordi@debian.org>
+.\" 
+.\" This is free documentation, see the latest version of the GNU
+.\" General Public License for copying conditions. There is NO warranty.
+.TH ALSACONF 8 "February 23, 2003"
+
+.SH NAME
+alsaconf \- configuration tool for the Advanced Linux Sound Architecture
+
+.SH SYNOPSIS
+.B alsaconf
+.RI [ options ]
+
+.SH DESCRIPTION
+This manual page documents briefly the
+.B alsaconf
+command.
+This manual page was written for the Debian distribution because the
+original program does not have a manual page.
+.PP
+\fBAlsaconf\fP is a simple shell script which tries to detect the sound cards
+on your system and writes a suitable configuration file for ALSA. It will try
+to guess what GNU/Linux distribution you're running, and will act accordingly
+to the standards of that distribution, if specific support is available.
+.PP
+Alsaconf will write a modutils snippet which can be then used by modutils
+to load the correct parameters for your sound card.
+
+.SH OPTIONS
+Alsaconf accepts the following options:
+.TP
+.B \-l, \-\-legacy
+Check only for legacy non-isapnp cards
+.TP
+.B \-m, \-\-modinfo
+Read module descriptions instead of reading a card database.
+.TP
+.B \-s, \-\-sound\-wav\-file
+Use the specified wav file as a test sound
+.TP
+.B \-u, \-\-uid uid
+Set the uid for the ALSA devices (default = 0)
+.TP
+.B \-g, \-\-gid gid
+Set the gid for the ALSA devices (default = 0)
+.TP
+.B \-d, \-\-devmode mode
+Set the device mode for the ALSA devices (default = 0666)
+.TP
+.B \-r, \-\-strict
+Set strict device mode (equiv. with -g 17 -d 0660)
+.TP
+.B \-L, \-\-log
+Logging on /tmp/alsaconf.log
+.TP
+.B \-p, \-\-probe card-name
+Probe a legacy non-isapnp card and print module options
+.TP
+.B \-h, \-\-help
+Displays this help text
+
+.SH DEBIAN SPECIFIC
+In Debian, the default gid of the device files is 29 (corresponding to the
+audio group) and the default device mode is 0660.
+
+For the ALSA base package, see also
+.I /usr/share/doc/alsa-base/
+
+.SH SEE ALSO
+\fB
+alsamixer(1),
+amixer(1),
+aplay(1),
+arecord(1)
+\fP
+
+.SH HOMEPAGE
+http://www.alsa-project.org/
+
+.SH AUTHOR
+The alsaconf script was written by
+Takashi Iwai <tiwai@suse.de>,
+Bernd Kaindl <bk@suse.de> and
+Jan Ondrej (SAL) <ondrejj@salstar.sk>
+
+This manual page was written by Jordi Mallach <jordi@debian.org>,
+for the Debian system (but may be used by others).
Index: debian/alsa-utils/alsaconf/alsaconf.in
diff -u debian/alsa-utils/alsaconf/alsaconf.in:1.3 debian/alsa-utils/alsaconf/alsaconf.in:1.4
--- debian/alsa-utils/alsaconf/alsaconf.in:1.3	Tue Feb  3 20:36:45 2004
+++ debian/alsa-utils/alsaconf/alsaconf.in	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,1112 @@
+#!/bin/bash
+#
+#  ALSA Configurator
+#
+#  Copyright (c) 1999-2002  SuSE GmbH
+#                           Jan ONDREJ
+#
+#  written by Takashi Iwai <tiwai@suse.de>
+#             Bernd Kaindl <bk@suse.de>
+#             Jan ONDREJ (SAL) <ondrejj@salstar.sk>
+#
+#  based on the original version of Jan ONDREJ's alsaconf for ALSA 0.4.
+#
+#  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.
+#
+
+version=@VERSION@
+
+# Check for GNU/Linux distributions
+if [ -f /etc/SuSE-release -o -f /etc/UnitedLinux-release ]; then
+  distribution="suse"
+elif [ -f /etc/debian_version ]; then
+  distribution="debian"
+elif [ -f /etc/mandrake-release ]; then
+  distribution="mandrake"
+elif [ -f /etc/redhat-release -a `grep -c "Red Hat" /etc/redhat-release 2>/dev/null` -ne 0 ]; then
+  distribution="redhat"
+elif [ -f /etc/fedora-release -a `grep -c "Fedora" /etc/fedora-release 2>/dev/null` -ne 0 ]; then
+  distribution="fedora"
+else
+  distribution="unknown"
+fi
+
+for prog in lspci lsmod; do
+	for path in /sbin /usr/sbin /bin /usr/bin;do
+		[[ -x $path/$prog ]] && eval $prog=$path/$prog
+	done
+done
+unset prog path
+
+usage() {
+    echo "ALSA configurator version $version"
+    echo "usage: alsaconf [options]"
+    echo "  -l|--legacy    check only legacy non-isapnp cards"
+    echo "  -m|--modinfo   read module descriptions instead of reading card db"
+    echo "  -s|--sound wav-file"
+    echo "                 use the specified wav file as a test sound"
+    echo "  -u|--uid uid   set the uid for the ALSA devices (default = 0) [obsoleted]"
+    echo "  -g|--gid gid   set the gid for the ALSA devices (default = 0) [obsoleted]"
+    echo "  -d|--devmode mode"
+    echo "                 set the permission for ALSA devices (default = 0666) [obs.]"
+    echo "  -r|--strict    set strict device mode (equiv. with -g 17 -d 0660) [obsoleted]"
+    echo "  -L|--log       logging on $LOGFILE"
+    echo "  -p|--probe card-name"
+    echo "                 probe a legacy non-isapnp card and print module options"
+    echo "  -P|--listprobe list the supported legacy card modules"
+    echo "  -h|--help      what you're reading"
+    exit 1
+}
+
+OPTS=`getopt -o lmLhp:Pu:g:d:rs: --long legacy,modinfo,log,help,probe,listprobe,uid,gid,devmode,strict,sound -n alsaconf -- "$@"` || exit 1
+eval set -- "$OPTS"
+
+do_legacy_only=0
+use_modinfo_db=0
+do_logging=0
+alsa_uid=0
+alsa_gid=0
+alsa_mode=0666
+legacy_probe_card=""
+LOGFILE="/tmp/alsaconf.log"
+TESTSOUND="@TESTSOUND@"
+try_all_combination=0
+
+# legacy support
+LEGACY_CARDS="opl3sa2 cs4236 cs4232 cs4231 es18xx es1688 sb16 sb8"
+
+while true ; do
+    case "$1" in
+    -l|--legacy)
+	do_legacy_only=1; shift ;;
+    -m|--modifno)
+	use_modinfo_db=1; shift ;;
+    -s|--sound)
+	TESTSOUND=$2; shift 2;;
+    -h|--help)
+	usage; exit 1 ;;
+    -L|--log)
+	do_logging=1; rm -f $LOGFILE; shift;;
+    -p|--probe)
+	legacy_probe_card="$2"; shift 2;;
+    -P|--listprobe)
+	echo "$LEGACY_CARDS"; exit 0;;
+    -u|--uid)
+	alsa_uid="$2"; shift 2;;
+    -g|--gid)
+	alsa_gid="$2"; shift 2;;
+    -d|--devmode)
+	alsa_mode="$2"; shift 2;;
+    -r|--strict)
+	alsa_uid=0; alsa_gid=17; alsa_mode=0660; shift;;
+    --) shift ; break ;;
+    *) usage ; exit 1 ;;
+    esac
+done
+
+# Check for root privileges
+if [ `id -u` -ne 0 ]; then
+  echo "You must be root to use this script."
+  exit 1
+fi
+
+#
+# check the snd_ prefix for ALSA module options
+# snd_ prefix is obsoleted since 0.9.0rc4.
+#
+if modinfo -p snd | grep -q snd_ ; then
+  mpfx="snd_"
+else
+  mpfx=""
+fi
+
+alsa_device_opts=""
+if modinfo -p snd | grep -q uid ; then
+  if [ x"$alsa_uid" != x0 ]; then
+    alsa_device_opts="$alsa_device_opts ${mpfx}device_uid=$alsa_uid"
+  fi
+  if [ x"$alsa_gid" != x0 ]; then
+    alsa_device_opts="$alsa_device_opts ${mpfx}device_gid=$alsa_gid"
+  fi
+fi
+if modinfo -p snd | grep -q device_mode ; then
+  if [ x"$alsa_mode" != x0 ]; then
+    alsa_device_opts="$alsa_device_opts ${mpfx}device_mode=$alsa_mode"
+  fi
+fi
+
+case `uname -r` in
+2.6.*)
+  kernel="new"
+  ;;
+*)
+  kernel="old"
+  ;;
+esac
+
+if [ "$kernel" = "new" -a -f /etc/modprobe.conf ]; then
+  cfgfile="/etc/modprobe.conf"
+elif [ "$distribution" = "debian" ]; then
+  cfgfile="/etc/alsa/modutils/0.9"
+elif [ -e /etc/modules.conf ]; then
+  cfgfile="/etc/modules.conf"
+elif [ -e /etc/conf.modules ]; then
+  cfgfile="/etc/conf.modules"
+else
+  cfgfile="/etc/modules.conf"
+  touch /etc/modules.conf
+fi
+
+# Check for dialog, whiptail, gdialog, awk, ... ?
+if which dialog > /dev/null; then
+  DIALOG=dialog
+else
+  if which whiptail > /dev/null; then
+    whiptail_wrapper() {
+      X1="$1"
+      X2="$2"
+      if [ $1 = --yesno ]; then
+        X3=`expr $3 + 2`
+      else
+        X3=$3
+      fi
+      shift 3
+      whiptail "$X1" "$X2" $X3 "$@"
+    }
+    DIALOG=whiptail_wrapper
+  else
+    echo "Error, dialog or whiptail not found."
+    exit 1
+  fi
+fi
+if which awk > /dev/null; then :
+else
+  echo "Error, awk not found. Can't continue."
+  exit 1
+fi
+
+#
+# remove entries by yast2 sound configurator
+#
+remove_y2_block() {
+    awk '
+    /^alias sound-slot-[0-9]/ { next }
+    /^alias char-major-116 / { next }
+    /^alias char-major-14 / { next }
+    /^alias snd-card-[0-9] / { next }
+    /^options snd / { next }
+    /^options snd-/ { next }
+    /^options off / { next }
+    /^alias sound-service-[0-9]/ { next }
+    /^# YaST2: sound / { next }
+   { print }'
+}
+
+#
+# remove entries by sndconfig sound configurator
+#
+# found strings to search for in WriteConfModules, 
+# from sndconfig 0.68-4 (rawhide version)
+
+remove_sndconfig_block() {
+    awk '
+    /^alias sound-slot-0/ { modulename = $3 ; next }
+    /^alias sound-slot-[0-9]/ { next }
+    /^post-install sound-slot-[0-9] / { next }
+    /^pre-remove sound-slot-[0-9] / { next }
+    /^options sound / { next }
+    /^alias synth0 opl3/ { next }
+    /^options opl3 / { next }
+    /^alias midi / { mididev = $3 ; next }
+    /^options / { if ($2 == mididev) next }
+    /^pre-install / { if ($2 == mididev) next }
+    /^alias synth0 / { synth = $3 ; next }
+    /^post-install / { if ($2 == synth) next }
+    /^options sb / { next }
+    /^post-install .+ \/bin\/modprobe "aci"/ { if ($2 == modulename) next }
+    /^options adlib_card / { next }
+    /^options .+ isapnp=1/ { if ($2 == modulename) next }
+    /^options i810_audio / { next }
+    /^options / {if ($2 == modulename) next }
+   { print }'
+}
+
+#
+# remove the previous configuration by alsaconf
+#
+remove_ac_block() {
+    awk '/^'"$ACB"'$/,/^'"$ACE"'$/ { next } { print }'
+}
+
+#
+# set default mixer volumes
+#
+mixer() {
+  amixer set "$1" "$2" unmute >/dev/null 2>&1
+  amixer set "$1" unmute >/dev/null 2>&1
+}
+
+set_mixers() {
+    mixer Master 75%
+    mixer PCM 90%
+    mixer Synth 90%
+    mixer CD 90%
+    # mute mic
+    amixer set Mic 0% mute >/dev/null 2>&1
+    # ESS 1969 chipset has 2 PCM channels
+    mixer PCM,1 90%
+    # Trident/YMFPCI/emu10k1
+    mixer Wave 100%
+    mixer Music 100%
+    mixer AC97 100%
+    # CS4237B chipset:
+    mixer 'Master Digital' 75%
+    # Envy24 chips with analog outs
+    mixer DAC 90%
+    mixer DAC,0 90%
+    mixer DAC,1 90%
+    # some notebooks use headphone instead of master
+    mixer Headphone 75%
+    mixer Playback 100%
+    # turn off digital switches
+    amixer set "SB Live Analog/Digital Output Jack" off >/dev/null 2>&1
+    amixer set "Audigy Analog/Digital Output Jack" off >/dev/null 2>&1
+}
+
+
+# INTRO
+intro() {
+$DIALOG --msgbox "
+                   ALSA  CONFIGURATOR
+                          v$version
+
+            This script is a configurator for
+    Advanced Linux Sound Architecture (ALSA) driver.
+
+
+  If ALSA is already running, you should close all sound
+  apps now and stop the sound driver.
+  alsaconf will try to do this, but it's not 100% sure.
+" 20 63 || acex 0
+}
+
+# FAREWELL
+farewell() {
+$DIALOG --msgbox "
+
+     $*
+
+                  ALSA  CONFIGURATOR
+
+          will prepare the card for playing now.
+
+     Now I'll run '`basename $rcalsasound` start', then I'll use
+     amixer to raise the default volumes.
+     You can change the volume later via a mixer
+     program such as alsamixer or gamix.
+
+" 17 60 || acex 0
+}
+
+# Exit function
+acex() {
+  cleanup
+  clear
+  exit $1
+}
+
+#
+# search for alsasound init script
+#
+
+if [ "$distribution" = "debian" ]; then
+    rcalsasound=/etc/init.d/alsa
+elif [ -x /etc/init.d/alsasound ]; then
+    rcalsasound=/etc/init.d/alsasound
+elif [ -x /usr/sbin/rcalsasound ]; then
+    rcalsasound=/usr/sbin/rcalsasound
+elif [ -x /sbin/rcalsasound ]; then
+    rcalsasound=/sbin/rcalsasound
+elif [ -x /etc/rc.d/init.d/alsasound ]; then
+    rcalsasound=/etc/rc.d/init.d/alsasound
+elif [ -x /etc/init.d/alsa ]; then
+    rcalsasound=/etc/init.d/alsa
+else
+    rcalsasound=rcalsasound
+fi
+
+    
+# MAIN
+if [ -d /proc/asound ]; then
+  $rcalsasound stop >/dev/null 2>&1
+  /sbin/rmmod dmasound dmasound_awacs 2>/dev/null
+fi
+
+
+
+TMP=`mktemp -q /tmp/alsaconf.XXXXXX`
+if [ $? -ne 0 ]; then
+	echo "$0: Can't create temp file, exiting..."
+        exit 1
+fi
+FOUND=`mktemp -q /tmp/alsaconf.XXXXXX`
+if [ $? -ne 0 ]; then
+	echo "$0: Can't create temp file, exiting..."
+        exit 1
+fi
+DUMP=`mktemp -q /tmp/alsaconf.XXXXXX`
+if [ $? -ne 0 ]; then
+	echo "$0: Can't create temp file, exiting..."
+        exit 1
+fi
+cleanup () {
+    killall -9 aplay arecord >/dev/null 2>&1
+    /sbin/modprobe -r isapnp >/dev/null 2>&1
+    /sbin/modprobe -r isa-pnp >/dev/null 2>&1
+    rm -f "$TMP" "$FOUND" "$DUMP"
+}
+trap cleanup 0 
+
+# convert ISA PnP id number to string 'ABC'
+convert_isapnp_id () {
+    if [ -z "$1" ]; then
+	echo "XXXX"
+	return
+    fi
+    let a='('$1'>>2) & 0x3f'
+    let b='(('$1' & 0x03) << 3) | (('$1' >> 13) & 0x07)'
+    let c='('$1'>> 8) & 0x1f'
+    strs='@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+    echo ${strs:$a:1}${strs:$b:1}${strs:$c:1}
+}
+
+# swap high & low bytes
+swap_number () {
+    if [ -z "$1" ]; then
+	echo "0000"
+	return
+    fi
+    let v='(('$1'>>8)&0xff)|(('$1'&0xff)<<8)'
+    printf "%04x" $v
+}
+
+# build card database
+# build_card_db filename
+build_card_db () {
+    MODDIR=/lib/modules/`uname -r`
+    last_driver=""
+    echo -n > $1
+
+    # list pci cards
+    while read driver vendor device dummy; do
+	if expr $driver : 'snd-.*' >/dev/null ; then
+	    if [ "$last_driver" != "$driver" ]; then
+		echo $driver.o
+		last_driver=$driver
+	    fi
+	    id1=`printf '0x%04x' $vendor`
+	    id2=`printf '0x%04x' $device`
+	    echo "PCI: $id1=$id2"
+	fi
+    done < $MODDIR/modules.pcimap >> $1
+
+    # list isapnp cards
+    while read driver cardvendor carddevice data vendor func; do
+	if expr $driver : 'snd-.*' >/dev/null ; then
+	    if [ "$last_driver" != "$driver" ]; then
+		echo $driver.o
+		last_driver=$driver
+	    fi
+	    id1=`convert_isapnp_id $cardvendor`
+	    dev1=`swap_number $carddevice`
+	    id2=`convert_isapnp_id $vendor`
+	    dev2=`swap_number $func`
+	    echo "ISAPNP: $id1$dev1=$id2$dev2"
+	fi
+    done < $MODDIR/modules.isapnpmap >> $1
+}
+
+#
+# probe cards
+#
+probe_cards () {
+    test -r /proc/isapnp || /sbin/modprobe isapnp >/dev/null 2>&1
+    test -r /proc/isapnp || /sbin/modprobe isa-pnp >/dev/null 2>&1
+    if [ -r /proc/isapnp ]; then
+	cat /proc/isapnp >"$DUMP"
+    elif [ -d /sys/bus/pnp/devices/00:01.00 ]; then
+	# use 2.6 kernel's sysfs output
+	# fake the isapnp dump
+	# unfortunately, there is no card name information!
+	( cd /sys/bus/pnp/devices
+	  for i in *:*.00; do
+	    id=`cat $i/id`
+	    echo "Card 0 '$id:ISAPnP $id' " >> "$DUMP"
+	  done
+	)
+    else
+	echo -n >"$DUMP"
+    fi
+    CARDID_DB=/var/tmp/alsaconf.cards
+    if [ ! -r $CARDID_DB ]; then
+        use_modinfo_db=1
+    fi
+    if [ $use_modinfo_db != 1 ]; then
+	if [ $CARDID_DB -ot /lib/modules/`uname -r`/modules.dep ]; then
+	    use_modinfo_db=1
+	fi
+    fi
+    if [ $use_modinfo_db = 1 ]; then
+	echo "Building card database.."
+	build_card_db $CARDID_DB
+    fi
+    if [ ! -r $CARDID_DB ]; then
+	echo "No card database is found.."
+	exit 1
+    fi
+    ncards=`grep '^snd-.*\.o$' $CARDID_DB | wc -w`
+
+    awk '
+BEGIN {
+	format="%-40s %s\n";
+	ncards='"$ncards"';
+	idx=0;
+}
+/^snd-.*\.o$/{
+	sub(/.o$/, "");
+	driver=$0;
+	perc=(idx * 100) / (ncards + 1);
+	print int(perc);
+	idx++;
+}
+/^[<literal space><literal tab>]*PCI: /{
+	gsub(/0x/, "");
+	gsub(/=/, ":");
+	x = sprintf ("'$lspci' -n 2>/dev/null| grep '"'Class 0401'"' | grep %s", $2);
+	if (system (x) == 0)
+		printf "%s %s\n", $2, driver >>"'"$FOUND"'"
+}
+/^[<literal space><literal tab>]*ISAPNP: /{
+	gsub(/=.*/, "");
+	x = sprintf ("grep '\''^Card [0-9] .%s:'\'' '"$DUMP"'", $2);
+	if (system (x) == 0)
+		printf "%s %s\n", $2, driver >>"'"$FOUND"'"
+}' < $CARDID_DB |\
+    $DIALOG --gauge "Searching sound cards" 6 40 0
+
+    #
+    # PowerMac
+    #
+    if grep -q MacRISC /proc/cpuinfo; then
+	/sbin/modprobe -a -l | grep 'snd-powermac' | \
+	while read i; do
+	    i=${i##*/}
+	    i=${i%%.o}
+	    i=${i%%.ko}
+	    echo "PowerMac $i" >> $FOUND
+	done
+    fi
+}
+
+#
+# look for a descriptive device name from the given device id
+#
+find_device_name () {
+    if expr "$1" : '[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
+	$lspci -d $1 2>/dev/null| sed -e 's/^.*:..\.. Multimedia audio controller: //g'
+	return
+    elif expr "$1" : '[A-Z@][A-Z@][A-Z@][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
+	cardname=`grep '^Card [0-9]\+ '\'$1':' $DUMP | head -n 1 | sed -e 's/^Card [0-9]\+ '\''.*:\(.*\)'\'' .*$/\1/'`
+	echo $cardname
+    else
+	echo $1
+    fi
+}
+
+#
+# configure and try test sound
+#
+ac_config_card () {
+
+    CARD_DRIVER=snd-$1
+    CARD_OPTS="${*:2}"
+
+    # Configuration done
+    $DIALOG --yesno "
+Configuring $CARD_DRIVER
+Do you want to modify ${cfgfile}?" 8 50 || acex 0
+    clear
+
+    # Copy conf.modules and make changes.
+    ACB="# --- BEGIN: Generated by ALSACONF, do not edit. ---"
+    ACE="# --- END: Generated by ALSACONF, do not edit. ---"
+
+    # Detect 2.2.X kernel
+    KVER=`uname -r | tr ".-" "  "`
+    KVER1=`echo $KVER | cut -d" " -f1`
+    KVER2=`echo $KVER | cut -d" " -f2`
+    if [ $KVER1 -ge 2 ] && [ $KVER2 -ge 2 ]; then
+	SOUND_CORE="soundcore"
+    else
+	SOUND_CORE="snd"
+    fi
+
+    if [ "$distribution" = "redhat" -o "$distribution" = "fedora" ] ; then
+        remove_ac_block < $cfgfile | remove_sndconfig_block | uniq > $TMP
+    else
+	remove_ac_block < $cfgfile | remove_y2_block | uniq > $TMP
+    fi
+    echo "$ACB
+# --- ALSACONF verion $version ---" >> $TMP
+    if [ -z "$have_alias" -a "$kernel" = "new" ]; then
+	if grep -q char-major-116 /lib/modules/`uname -r`/modules.alias; then
+	    have_alias="yes"
+	fi
+    fi
+    if [ -z "$have_alias" ]; then
+echo "alias char-major-116 snd
+alias char-major-14 $SOUND_CORE
+alias sound-service-0-0 snd-mixer-oss
+alias sound-service-0-1 snd-seq-oss
+alias sound-service-0-3 snd-pcm-oss
+alias sound-service-0-8 snd-seq-oss
+alias sound-service-0-12 snd-pcm-oss" >> $TMP
+    fi
+    if [ -n "$alsa_device_opts" ]; then
+	echo "options snd $alsa_device_opts" >> $TMP
+    fi
+echo "alias snd-card-0 $CARD_DRIVER
+alias sound-slot-0 $CARD_DRIVER" >> $TMP
+    if [ -n "$CARD_OPTS" ]; then
+	echo "options $CARD_DRIVER $CARD_OPTS" >> $TMP
+    fi
+echo "$ACE
+" >> $TMP
+
+    if cp -f $cfgfile $cfgfile.old; then
+	:
+    else
+	echo "ERROR! $cfgfile could not be saved."
+	echo "Configured ALSA is in /tmp/alsaconf.saved."
+	cp $TMP /tmp/alsaconf.saved
+	exit 1
+    fi
+
+    cp -f $TMP $cfgfile
+    /sbin/depmod -a 2>/dev/null
+
+    # remove yast2 entries (- only for suse distro)
+    if [ -f /var/lib/YaST/unique.inf ]; then
+	awk '
+BEGIN { in_sound=0; }
+/^\[sound\]$/ { print; in_sound=1; next; }
+/^\[.+\]$/ { print; in_sound=0; next; }
+{ if (in_sound == 0) { print; } }
+' < /var/lib/YaST/unique.inf > $TMP
+	cp -f $TMP /var/lib/YaST/unique.inf
+    fi
+
+    farewell "OK, driver $CARD_DRIVER is configured."
+    clear
+    if [ "$distribution" = "debian" ]; then
+      echo Running update-modules...
+      update-modules
+    fi
+    echo Loading driver...
+    $rcalsasound start
+    echo Setting default volumes...
+    if [ -x /usr/bin/set_default_volume ]; then
+	/usr/bin/set_default_volume -f
+    else
+	set_mixers
+    fi
+    if [ -f $TESTSOUND ]; then
+      if $DIALOG --yesno "
+       The mixer is set up now for for playing.
+       Shall I try to play a sound sample now?
+
+                           NOTE:
+If you have a big amplifier, lower your volumes or say no.
+    Otherwise check that your speaker volume is open,
+          and look if you can hear test sound.
+" 13 65 
+      then
+	  echo
+	  aplay $TESTSOUND
+      fi
+    fi
+    if [ ! -r /etc/asound.state ]; then
+	echo "Saving the mixer setup used for this in /etc/asound.state."
+	/usr/sbin/alsactl store
+    fi
+    cat <<END
+===============================================================================
+
+ Now ALSA is ready to use.
+ For adjustment of volumes, use your favorite mixer.
+
+ Have a lot of fun!
+
+END
+}
+
+
+#
+# probe legacy ISA cards
+#
+
+check_dma_avail () {
+    if [ -r /proc/dma ]; then
+	list=""
+	for dma in $*; do
+	    grep '^ *'$dma': ' /proc/dma >/dev/null 2>&1 || list="$list $dma"
+	done
+	echo $list
+    fi
+}
+
+check_irq_avail () {
+    if [ -r /proc/interrupts ]; then
+	list=""
+	for irq in $*; do
+	    grep '^ *'$irq': ' /proc/interrupts >/dev/null 2>&1 || list="$list $irq"
+	done
+	echo $list
+    fi
+}
+
+# check playback
+# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
+ac_try_load () {
+    test $do_logging = 1 && echo "$1 ${*:2}" >> $LOGFILE
+    /sbin/modprobe snd-$1 ${*:2} >/dev/null 2>&1
+    $lsmod | grep -E '(snd-|snd_)'$1 >/dev/null 2>&1 || return 1
+
+    # mute mixers
+    amixer set Master 0% mute >/dev/null 2>&1
+    amixer set PCM 0% mute >/dev/null 2>&1
+    
+    # output 0.5 sec
+    head -c 4000 < /dev/zero | aplay -r8000 -fS16_LE -traw -c1 > /dev/null 2>&1 &
+    # remember pid
+    pp=$!
+    # sleep for 2 seconds (to be sure -- 1 sec would be enough)
+    sleep 2
+    # kill the child process if still exists.
+    kill -9 $pp > /dev/null 2>&1
+    st=$?
+    ac_cardname=`head -n 1 /proc/asound/cards | sed -e 's/^[0-9].* - \(.*\)$/\1/'`
+    /sbin/modprobe -r snd-$1 >/dev/null 2>&1
+    if [ $st = 0 ]; then
+	# irq problem?
+	test $do_logging = 1 && echo "no playback return" >> $LOGFILE
+	return 2
+    else
+	# seems ok!
+	test $do_logging = 1 && echo "playback OK" >> $LOGFILE
+	return 0
+    fi
+}
+
+# check capture
+# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
+# ac_try_capture card duplex opts
+ac_try_capture () {
+    test $do_logging = 1 && echo "$1 ${*:2}" >> $LOGFILE
+    /sbin/modprobe snd-$1 ${*:3} >/dev/null 2>&1
+    $lsmod | grep -E '(snd-|snd_)'$1 >/dev/null 2>&1 || return 1
+
+    # mute mixers
+    amixer set Master 0% mute >/dev/null 2>&1
+    amixer set PCM 0% mute >/dev/null 2>&1
+
+    play_pid=0
+    if [ $2 = yes ]; then
+	# try duplex - start dummy playing
+	aplay -r8000 -fS16_LE -traw -c1 < /dev/zero > /dev/null 2>&1 &
+	play_pid=$!
+    fi
+    # record 1sec
+    arecord -d1 > /dev/null 2>&1 &
+    # remember pid
+    pp=$!
+    # sleep for 2 seconds
+    sleep 2
+    # kill the child process if still exists.
+    kill -9 $pp > /dev/null 2>&1
+    st=$?
+    # kill playback process if any
+    test $play_pid != 0 && kill -9 $play_pid
+    /sbin/modprobe -r snd-$1 >/dev/null 2>&1
+    if [ $st = 0 ]; then
+	test $do_logging = 1 && echo "capture no return" >> $LOGFILE
+	return 2
+    else
+	test $do_logging = 1 && echo "capture OK" >> $LOGFILE
+	return 0
+    fi
+}
+
+get_dma_pair () {
+    case $1 in
+    0)
+	echo 1 3 5;;
+    1)
+	echo 0 3 5;;
+    3)
+	echo 1 0 5;;
+    5)
+	echo 3 1 0;;
+    esac
+}
+
+#
+# check playback on specified irqs
+#
+# ac_try_irq card opts irqs...
+# return 0 - OK, 1 - NG, 2 - not working (dma problem?)
+#
+ac_try_irq () {
+    card=$1
+    opts="$2 ${mpfx}irq=$3"
+    ac_try_load $card $opts >/dev/null 2>&1
+    result=$?
+    case $result in
+    0)
+	ac_opts="$opts"
+	return 0
+	;;
+    2)
+	for irq in ${*:4}; do
+	    opts="$2 ${mpfx}irq=$irq"
+	    ac_try_load $card $opts >/dev/null 2>&1
+	    if [ $? = 0 ]; then
+		ac_opts="$opts"
+		return 0
+	    fi
+	done
+	return 2
+	;;
+    esac
+    return 1
+}
+
+#
+# check playback/capture on dma1 & dma2 & specified irqs
+#
+# ac_try_dmas card opts irqs...
+# return 0 - OK, 1 - NG
+#
+ac_try_dmas () {
+    dma_list=`check_dma_avail 1 0 3 5`
+    for irq in ${*:3}; do
+	for dma1 in $dma_list; do
+	    for dma2 in `get_dma_pair $dma1`; do
+		opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
+		ac_try_load $1 $opts >/dev/null 2>&1
+		result=$?
+		if [ $result = 1 ]; then
+		    if [ $try_all_combination = 1 ]; then
+			continue
+		    else
+			return 1
+		    fi
+		elif [ $result = 0 ]; then
+		    test $do_logging = 1 && echo "Now checking capture..." >> $LOGFILE
+		    ac_opts="$opts"
+		    ac_try_capture $1 yes $opts >/dev/null 2>&1 && return 0
+		    for d in yes no; do
+			for dma2 in $dma_list; do
+			    if [ $dma1 != $dma2 ]; then
+				opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
+				ac_opts="$opts"
+				ac_try_capture $1 $d $opts >/dev/null 2>&1 && return 0
+			    fi
+			done
+		    done
+		    return 0
+		fi
+	    done
+	done
+    done
+    return 1
+}
+
+# check if the option $2 exists in card $1: set value $3
+ac_check_option () {
+    if modinfo -p snd-$1 | grep $2 > /dev/null 2>&1 ; then
+      echo "$2=$3"
+    fi
+}
+   
+ac_try_card_sb8 () {
+    card=sb8
+    irq_list=`check_irq_avail 5 3 9 10 7`
+    for dma8 in `check_dma_avail 1 3`; do
+	opts="${mpfx}dma8=$dma8"
+	ac_try_irq $card "$opts" $irq_list && return 0
+    done
+    return 1
+}
+
+ac_try_card_sb16 () {
+    card=sb16
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    opts="$isapnp"
+    irq_list=`check_irq_avail 5 9 10 7 3`
+    dma_list=`check_dma_avail 0 1 3`
+    dma16_list=`check_dma_avail 5 6 7`
+    # at first try auto-probing by driver itself
+    ac_try_load $card $opts >/dev/null 2>&1
+    result=$?
+    case $result in
+    0)
+	ac_opts="$opts"
+	ac_try_capture $card yes $opts >/dev/null 2>&1 && return 0
+	for d in yes no; do
+	    for dma8 in $dma_list; do
+		for irq in $irq_list; do
+		    opts="${mpfx}dma8=$dma8 ${mpfx}irq=$irq $isapnp"
+		    ac_try_capture $card $d $opts >/dev/null 2>&1 && return 0
+		done
+	    done
+	done
+	return 0
+	;;
+    2)
+	for dma16 in $dma16_list; do
+	    opts="${mpfx}dma16=$dma16 $isapnp"
+	    if ac_try_irq $card "$opts" $irq_list ; then
+		ac_try_capture $card yes $ac_opts >/dev/null 2>&1 && return 0
+		ac_opts_saved="$ac_opts"
+		for d in yes no; do
+		    for dma8 in $dma_list; do
+			ac_opts="$ac_opts_saved ${mpfx}dma8=$dma8"
+			ac_try_capture $card $d $ac_opts >/dev/null 2>&1 && return 0
+		    done
+		done
+		# return anyway here..
+		return 0
+	    fi
+	done
+	;;
+    esac
+    return 1
+}
+
+ac_try_card_es1688 () {
+    card=es1688
+    opts=""
+    irq_list=`check_irq_avail 5 9 10 7`
+    for dma8 in `check_dma_avail 1 3 0`; do
+	opts="${mpfx}dma8=$dma8 ${mpfx}mpu_irq=-1"
+	ac_try_irq $card "$opts" $irq_list && return 0
+    done
+    return 1
+}
+
+ac_try_card_es18xx () {
+    card=es18xx
+    opts=`ac_check_option $card ${mpfx}isapnp 0`
+    ac_try_dmas $card "$opts" `check_irq_avail 5 9 10 7` && return 0
+    return 1
+}
+
+ac_try_card_cs4236 () {
+    card=cs4236
+    irq_list=`check_irq_avail 5 7 9 11 12 15`
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    for cport in 0x538 0x210 0xf00; do
+	for port in 0x530 0x534; do
+	    opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
+	    ac_try_dmas $card "$opts" $irq_list && return 0
+	done
+    done
+    return 1
+}
+
+ac_try_card_cs4232 () {
+    card=cs4232
+    irq_list=`check_irq_avail 5 7 9 11 12 15`
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    for cport in 0x538 0x210 0xf00; do
+	for port in 0x530 0x534; do
+	    opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
+	    ac_try_dmas $card "$opts" $irq_list && return 0
+	done
+    done
+    return 1
+}
+
+ac_try_card_cs4231 () {
+    card=cs4231
+    irq_list=`check_irq_avail 5 7 9 11 12 15`
+    for port in 0x530 0x534; do
+	opts="${mpfx}port=$port"
+	ac_try_dmas $card "$opts" $irq_list && return 0
+    done
+    return 1
+}
+
+ac_try_card_opl3sa2 () {
+    card=opl3sa2
+    irq_list=`check_irq_avail 5 9 3 1 11 12 15 0`
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    for port in 0x370 0x538 0xf86 0x100; do
+	for wss_port in 0x530 0xe80 0xf40 0x604; do
+	    opts="${mpfx}fm_port=-1 ${mpfx}midi_port=-1 ${mpfx}port=$port ${mpfx}wss_port=$wss_port $isapnp"
+	    ac_try_dmas $card "$opts" $irq_list && return 0
+	done
+    done
+    return 1
+}
+
+ac_config_legacy () {
+
+    $DIALOG --title "WARNING" --yesno "
+   Probing legacy ISA cards might make
+   your system unstable.
+
+        Are you sure to proceed?
+
+" 10 50 || acex 0
+
+    if [ x"$1" = x ]; then
+	probe_list="$LEGACY_CARDS"
+    else
+	probe_list=$*
+    fi
+    menu_args=()
+
+    for card in $probe_list; do
+	cardname=`/sbin/modinfo -d snd-$card | sed -e 's/^\"\(.*\)\"$/\1/g'`
+	if [ x"$cardname" != x ]; then
+	    menu_args=("${menu_args[@]}" "$card" "$cardname" "on")
+	fi
+    done
+    if [ x$menu_args = x ]; then
+	$DIALOG --msgbox "No legacy drivers are available
+   for your machine" 5 50
+	return 1
+    fi
+    $DIALOG --title "Driver Selection" --checklist \
+"           Probing legacy ISA cards
+
+        Please select the drivers to probe:" \
+	17 64 8 "${menu_args[@]}" 2> $FOUND || acex 0
+
+    if [ $try_all_combination != 1 ]; then
+	if $DIALOG --yesno "
+ Shall I try all possible DMA and IRQ combinations?
+ With this option, some unconventional configuration
+ might be found, but it will take much longer time." 10 60
+	    then
+	    try_all_combination=1
+	fi
+    fi
+
+    echo "Probing legacy cards..   This may take a few minutes.."
+    echo -n "Probing: "
+    cards=`cat $FOUND | tr -d \"`
+    for card in $cards; do
+	echo -n " $card"
+	ac_opts=""
+	if eval ac_try_card_$card ; then
+	    echo ' : FOUND!!'
+	    ac_config_card $card $ac_opts
+	    return 0
+	fi
+    done
+    echo
+    $DIALOG --title "Result" --msgbox "No legacy cards found" 5 50
+    return 1
+}
+
+#
+# main part continued..
+#
+
+if [ x"$legacy_probe_card" != x ]; then
+    ac_opts=""
+    if eval ac_try_card_$legacy_probe_card >/dev/null 2>&1; then
+	echo "$ac_opts"
+	echo "$ac_cardname"
+	exit 0
+    else
+	echo "FAILED"
+	exit 1
+    fi
+fi
+
+intro
+
+if [ $do_legacy_only = 1 ]; then
+    ac_config_legacy
+    exit 0
+fi
+    
+probe_cards
+
+devs_found=()
+
+if [ -s "$FOUND" ]; then
+    while read dev card ; do
+	/sbin/modprobe -a -l | grep -E $card'\.(o|ko)' >/dev/null 2>&1 || continue
+	cardname=`find_device_name $dev | cut -c 1-64`
+	if [ -z "$cardname" ]; then
+	    cardname="$card"
+	fi
+	card=${card##snd-}
+	devs_found=("${devs_found[@]}" "$card" "$cardname")
+    done <"$FOUND"
+fi
+if [ x$devs_found != x ]; then
+    #
+    # check for TP600E
+    #
+    if [ ${devs_found[0]} = cs46xx ]; then
+	if $lspci -nv 2>/dev/null| grep -q "Subsystem: 1014:1010"; then
+	    if $DIALOG --yesno "
+ Looks like you having a Thinkpad 600E or 770 notebook.
+ On this notebook, CS4236 driver should be used
+ although CS46xx chip is detected.
+
+ Shall I try to snd-cs4236 driver and probe
+ the legacy ISA configuration?" 13 60
+	    then
+		try_all_combination=1
+		ac_config_legacy cs4236
+		exit 0
+	    fi
+	fi
+    fi
+   
+    devs_found=("${devs_found[@]}" "legacy" "Probe legacy ISA (non-PnP) chips")
+    $DIALOG --title "Soundcard Selection" --menu "
+         Following card(s) are found on your system.
+         Choose a soundcard to configure:
+" 17 76 8 "${devs_found[@]}" 2> $FOUND || acex 0
+    card=`head -n 1 $FOUND`
+    if [ "$card" = "legacy" ]; then
+	ac_config_legacy
+    else
+	ac_config_card "$card"
+    fi
+    exit 0
+else
+    if $DIALOG --yesno "
+        No supported PnP or PCI card found.
+
+ Would you like to probe legacy ISA sound cards/chips?
+
+" 9 60 ; then
+	ac_config_legacy
+	exit 0
+    fi
+fi
+
+rm -f "$FOUND" "$DUMP"
+exit 0
Index: debian/alsa-utils/alsactl/Makefile.am
diff -u debian/alsa-utils/alsactl/Makefile.am:1.3 debian/alsa-utils/alsactl/Makefile.am:1.4
--- debian/alsa-utils/alsactl/Makefile.am:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsactl/Makefile.am	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,5 @@
+sbin_PROGRAMS=alsactl
+man_MANS=alsactl.1
+EXTRA_DIST=alsactl.1
+
+alsactl_SOURCES=alsactl.c
Index: debian/alsa-utils/alsactl/Makefile.in
diff -u debian/alsa-utils/alsactl/Makefile.in:1.3 debian/alsa-utils/alsactl/Makefile.in:1.4
--- debian/alsa-utils/alsactl/Makefile.in:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsactl/Makefile.in	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,355 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+sbin_PROGRAMS = alsactl
+man_MANS = alsactl.1
+EXTRA_DIST = alsactl.1
+
+alsactl_SOURCES = alsactl.c
+subdir = alsactl
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+sbin_PROGRAMS = alsactl$(EXEEXT)
+PROGRAMS = $(sbin_PROGRAMS)
+
+am_alsactl_OBJECTS = alsactl.$(OBJEXT)
+alsactl_OBJECTS = $(am_alsactl_OBJECTS)
+alsactl_LDADD = $(LDADD)
+alsactl_DEPENDENCIES =
+alsactl_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/alsactl.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(alsactl_SOURCES)
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = $(alsactl_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  alsactl/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(sbindir)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-sbinPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
+	  rm -f $(DESTDIR)$(sbindir)/$$f; \
+	done
+
+clean-sbinPROGRAMS:
+	-test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+alsactl$(EXEEXT): $(alsactl_OBJECTS) $(alsactl_DEPENDENCIES) 
+	@rm -f alsactl$(EXEEXT)
+	$(LINK) $(alsactl_LDFLAGS) $(alsactl_OBJECTS) $(alsactl_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alsactl.Po@am__quote@
+
+distclean-depend:
+	-rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+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/^.*\\.//'`; \
+	  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/^.*\\.//'`; \
+	  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
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(man1dir)
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-sbinPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-info-am uninstall-man uninstall-sbinPROGRAMS
+
+uninstall-man: uninstall-man1
+
+.PHONY: GTAGS all all-am check check-am clean clean-generic \
+	clean-sbinPROGRAMS distclean distclean-compile distclean-depend \
+	distclean-generic distclean-tags distdir dvi dvi-am info \
+	info-am install install-am install-data install-data-am \
+	install-exec install-exec-am install-info install-info-am \
+	install-man install-man1 install-sbinPROGRAMS install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic tags uninstall uninstall-am \
+	uninstall-info-am uninstall-man uninstall-man1 \
+	uninstall-sbinPROGRAMS
+
+# 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:
Index: debian/alsa-utils/alsactl/alsactl.1
diff -u debian/alsa-utils/alsactl/alsactl.1:1.3 debian/alsa-utils/alsactl/alsactl.1:1.4
--- debian/alsa-utils/alsactl/alsactl.1:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsactl/alsactl.1	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,78 @@
+.TH ALSACTL 1 "15 May 2001"
+.SH NAME
+alsactl \- advanced controls for ALSA soundcard driver
+
+.SH SYNOPSIS
+
+\fBalsactl\fP [\fIoptions\fP] [\fIstore\fP|\fIrestore\fP] <card # or id>
+
+.SH DESCRIPTION
+\fBalsactl\fP is used to control advanced settings for the ALSA
+soundcard drivers. It supports multiple soundcards. If your card has
+features that you can't seem to control from a mixer application,
+you have come to the right place.
+
+.SH INVOKING
+
+\fBalsactl\fP [\fIoptions\fP] [\fIstore\fP|\fIrestore\fP] <card # or id>
+
+.SS Commands
+
+\fIstore\fP saves the current driver state for the selected soundcard
+to the configuration file.
+
+\fIrestore\fP loads driver state for the selected soundcard from the configuration file.
+
+If no soundcards are specified, setup for all cards will be saved or
+loaded.
+
+.SS Options
+
+.TP
+\fI-h, --help\fP 
+Help: show available flags and commands.
+
+.TP
+\fI-f, --file\fP
+Select the configuration file to use. The default is /etc/asound.state
+
+.TP
+\fI-F, --force\fP
+Used with restore command.  Try to restore the matching control elements
+as much as possible.
+
+.TP
+\fI-d, --debug\fP
+Use debug mode: a bit more verbose.
+
+.TP
+\fI-v, --version\fP
+Print alsactl version number.
+
+.SH FILES
+\fI/etc/asound.state\fP (or whatever file you specify with the
+\fB-f\fP flag) is used to store current settings for your
+soundcards. The settings include all the usual soundcard mixer
+settings.  More importantly, alsactl is
+capable of controlling other card-specific features that mixer apps
+usually don't know about.
+
+The configuration file is generated automatically by running
+\fBalsactl store\fP. Editing the configuration file by hand may be
+necessary for some soundcard features (e.g. enabling/disabling
+automatic mic gain, digital output, joystick/game ports, some future MIDI
+routing options, etc).
+
+.SH SEE ALSO
+\fB
+amixer(1),
+alsamixer(1),
+aplay(1)
+\fP
+
+.SH BUGS 
+None known.
+
+.SH AUTHOR
+\fBalsactl\fP is by Jaroslav Kysela <perex@suse.cz> and Abramo Bagnara
+<abramo@alsa-project.org>. This document is by Paul Winkler <zarmzarm@erols.com>.
Index: debian/alsa-utils/alsactl/alsactl.c
diff -u debian/alsa-utils/alsactl/alsactl.c:1.3 debian/alsa-utils/alsactl/alsactl.c:1.4
--- debian/alsa-utils/alsactl/alsactl.c:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsactl/alsactl.c	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,1385 @@
+/*
+ *  Advanced Linux Sound Architecture Control Program
+ *  Copyright (c) by Abramo Bagnara <abramo@alsa-project.org>
+ *                   Jaroslav Kysela <perex@suse.cz>
+ *
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#include "aconfig.h"
+#include "version.h"
+#include <getopt.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <assert.h>
+#include <errno.h>
+#include <alsa/asoundlib.h>
+
+#define SYS_ASOUNDRC "/etc/asound.state"
+
+int debugflag = 0;
+int force_restore = 0;
+char *command;
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#define error(...) do {\
+	fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \
+	fprintf(stderr, __VA_ARGS__); \
+	putc('\n', stderr); \
+} while (0)
+#else
+#define error(args...) do {\
+	fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \
+	fprintf(stderr, ##args); \
+	putc('\n', stderr); \
+} while (0)
+#endif	
+
+static void help(void)
+{
+	printf("Usage: alsactl <options> command\n");
+	printf("\nAvailable options:\n");
+	printf("  -h,--help       this help\n");
+	printf("  -f,--file #     configuration file (default " SYS_ASOUNDRC ")\n");
+	printf("  -F,--force      try to restore the matching controls as much as possible\n");
+	printf("  -d,--debug      debug mode\n");
+	printf("  -v,--version    print version of this program\n");
+	printf("\nAvailable commands:\n");
+	printf("  store <card #>  save current driver setup for one or each soundcards\n");
+	printf("                  to configuration file\n");
+	printf("  restore<card #> load current driver setup for one or each soundcards\n");
+	printf("                  from configuration file\n");
+	printf("  power [card #] [state]\n");
+	printf("                  get/set power state for one or each soundcards\n");
+}
+
+char *id_str(snd_ctl_elem_id_t *id)
+{
+	static char str[128];
+	assert(id);
+	sprintf(str, "%i,%i,%i,%s,%i", 
+		snd_ctl_elem_id_get_interface(id),
+		snd_ctl_elem_id_get_device(id),
+		snd_ctl_elem_id_get_subdevice(id),
+		snd_ctl_elem_id_get_name(id),
+		snd_ctl_elem_id_get_index(id));
+	return str;
+}
+
+char *num_str(long n)
+{
+	static char str[32];
+	sprintf(str, "%ld", n);
+	return str;
+}
+
+static int snd_config_integer_add(snd_config_t *father, char *id, long integer)
+{
+	int err;
+	snd_config_t *leaf;
+	err = snd_config_make_integer(&leaf, id);
+	if (err < 0)
+		return err;
+	err = snd_config_add(father, leaf);
+	if (err < 0) {
+		snd_config_delete(leaf);
+		return err;
+	}
+	err = snd_config_set_integer(leaf, integer);
+	if (err < 0) {
+		snd_config_delete(leaf);
+		return err;
+	}
+	return 0;
+}
+
+static int snd_config_integer64_add(snd_config_t *father, char *id, long long integer)
+{
+	int err;
+	snd_config_t *leaf;
+	err = snd_config_make_integer64(&leaf, id);
+	if (err < 0)
+		return err;
+	err = snd_config_add(father, leaf);
+	if (err < 0) {
+		snd_config_delete(leaf);
+		return err;
+	}
+	err = snd_config_set_integer64(leaf, integer);
+	if (err < 0) {
+		snd_config_delete(leaf);
+		return err;
+	}
+	return 0;
+}
+
+static int snd_config_string_add(snd_config_t *father, const char *id, const char *string)
+{
+	int err;
+	snd_config_t *leaf;
+	err = snd_config_make_string(&leaf, id);
+	if (err < 0)
+		return err;
+	err = snd_config_add(father, leaf);
+	if (err < 0) {
+		snd_config_delete(leaf);
+		return err;
+	}
+	err = snd_config_set_string(leaf, string);
+	if (err < 0) {
+		snd_config_delete(leaf);
+		return err;
+	}
+	return 0;
+}
+
+static int snd_config_compound_add(snd_config_t *father, const char *id, int join,
+				   snd_config_t **node)
+{
+	int err;
+	snd_config_t *leaf;
+	err = snd_config_make_compound(&leaf, id, join);
+	if (err < 0)
+		return err;
+	err = snd_config_add(father, leaf);
+	if (err < 0) {
+		snd_config_delete(leaf);
+		return err;
+	}
+	*node = leaf;
+	return 0;
+}
+
+static int get_control(snd_ctl_t *handle, snd_ctl_elem_id_t *id, snd_config_t *top)
+{
+	snd_ctl_elem_value_t *ctl;
+	snd_ctl_elem_info_t *info;
+	snd_config_t *control, *comment, *item, *value;
+	const char *s;
+	char buf[256];
+	unsigned int idx;
+	int err;
+	unsigned int device, subdevice, index;
+	const char *name;
+	snd_ctl_elem_type_t type;
+	unsigned int count;
+	snd_ctl_elem_value_alloca(&ctl);
+	snd_ctl_elem_info_alloca(&info);
+	snd_ctl_elem_info_set_id(info, id);
+	err = snd_ctl_elem_info(handle, info);
+	if (err < 0) {
+		error("Cannot read control info '%s': %s", id_str(id), snd_strerror(err));
+		return err;
+	}
+
+	if (!snd_ctl_elem_info_is_readable(info))
+		return 0;
+	snd_ctl_elem_value_set_id(ctl, id);
+	err = snd_ctl_elem_read(handle, ctl);
+	if (err < 0) {
+		error("Cannot read control '%s': %s", id_str(id), snd_strerror(err));
+		return err;
+	}
+
+	err = snd_config_compound_add(top, num_str(snd_ctl_elem_info_get_numid(info)), 0, &control);
+	if (err < 0) {
+		error("snd_config_compound_add: %s", snd_strerror(err));
+		return err;
+	}
+	err = snd_config_compound_add(control, "comment", 1, &comment);
+	if (err < 0) {
+		error("snd_config_compound_add: %s", snd_strerror(err));
+		return err;
+	}
+
+	buf[0] = '\0';
+	buf[1] = '\0';
+	if (snd_ctl_elem_info_is_readable(info))
+		strcat(buf, " read");
+	if (snd_ctl_elem_info_is_writable(info))
+		strcat(buf, " write");
+	if (snd_ctl_elem_info_is_inactive(info))
+		strcat(buf, " inactive");
+	if (snd_ctl_elem_info_is_volatile(info))
+		strcat(buf, " volatile");
+	if (snd_ctl_elem_info_is_locked(info))
+		strcat(buf, " locked");
+	if (snd_ctl_elem_info_is_indirect(info))
+		strcat(buf, " indirect");
+	err = snd_config_string_add(comment, "access", buf + 1);
+	if (err < 0) {
+		error("snd_config_string_add: %s", snd_strerror(err));
+		return err;
+	}
+
+	type = snd_ctl_elem_info_get_type(info);
+	device = snd_ctl_elem_info_get_device(info);
+	subdevice = snd_ctl_elem_info_get_subdevice(info);
+	index = snd_ctl_elem_info_get_index(info);
+	name = snd_ctl_elem_info_get_name(info);
+	count = snd_ctl_elem_info_get_count(info);
+	s = snd_ctl_elem_type_name(type);
+	err = snd_config_string_add(comment, "type", s);
+	if (err < 0) {
+		error("snd_config_string_add: %s", snd_strerror(err));
+		return err;
+	}
+
+	switch (type) {
+	case SND_CTL_ELEM_TYPE_BOOLEAN:
+		break;
+	case SND_CTL_ELEM_TYPE_INTEGER:
+	{
+		long min = snd_ctl_elem_info_get_min(info);
+		long max = snd_ctl_elem_info_get_max(info);
+		long step = snd_ctl_elem_info_get_step(info);
+		if (step)
+			sprintf(buf, "%li - %li (step %li)", min, max, step);
+		else
+			sprintf(buf, "%li - %li", min, max);
+		err = snd_config_string_add(comment, "range", buf);
+		if (err < 0) {
+			error("snd_config_string_add: %s", snd_strerror(err));
+			return err;
+		}
+		break;
+	}
+	case SND_CTL_ELEM_TYPE_INTEGER64:
+	{
+		long long min = snd_ctl_elem_info_get_min64(info);
+		long long max = snd_ctl_elem_info_get_max64(info);
+		long long step = snd_ctl_elem_info_get_step64(info);
+		if (step)
+			sprintf(buf, "%Li - %Li (step %Li)", min, max, step);
+		else
+			sprintf(buf, "%Li - %Li", min, max);
+		err = snd_config_string_add(comment, "range", buf);
+		if (err < 0) {
+			error("snd_config_string_add: %s", snd_strerror(err));
+			return err;
+		}
+		break;
+	}
+	case SND_CTL_ELEM_TYPE_ENUMERATED:
+	{
+		unsigned int items;
+		err = snd_config_compound_add(comment, "item", 1, &item);
+		if (err < 0) {
+			error("snd_config_compound_add: %s", snd_strerror(err));
+			return err;
+		}
+		items = snd_ctl_elem_info_get_items(info);
+		for (idx = 0; idx < items; idx++) {
+			snd_ctl_elem_info_set_item(info, idx);
+			err = snd_ctl_elem_info(handle, info);
+			if (err < 0) {
+				error("snd_ctl_card_info: %s", snd_strerror(err));
+				return err;
+			}
+			err = snd_config_string_add(item, num_str(idx), snd_ctl_elem_info_get_item_name(info));
+			if (err < 0) {
+				error("snd_config_string_add: %s", snd_strerror(err));
+				return err;
+			}
+		}
+		break;
+	}
+	default:
+		break;
+	}
+	s = snd_ctl_elem_iface_name(snd_ctl_elem_info_get_interface(info));
+	err = snd_config_string_add(control, "iface", s);
+	if (err < 0) {
+		error("snd_config_string_add: %s", snd_strerror(err));
+		return err;
+	}
+	if (device != 0) {
+		err = snd_config_integer_add(control, "device", device);
+		if (err < 0) {
+			error("snd_config_integer_add: %s", snd_strerror(err));
+			return err;
+		}
+	}
+	if (subdevice != 0) {
+		err = snd_config_integer_add(control, "subdevice", subdevice);
+		if (err < 0) {
+			error("snd_config_integer_add: %s", snd_strerror(err));
+			return err;
+		}
+	}
+	err = snd_config_string_add(control, "name", name);
+	if (err < 0) {
+		error("snd_config_string_add: %s", snd_strerror(err));
+		return err;
+	}
+	if (index != 0) {
+		err = snd_config_integer_add(control, "index", index);
+		if (err < 0) {
+			error("snd_config_integer_add: %s", snd_strerror(err));
+			return err;
+		}
+	}
+
+	switch (type) {
+	case SND_CTL_ELEM_TYPE_BYTES:
+	case SND_CTL_ELEM_TYPE_IEC958:
+	{
+		size_t size = type == SND_CTL_ELEM_TYPE_BYTES ?
+			count : sizeof(snd_aes_iec958_t);
+		char buf[size * 2 + 1];
+		char *p = buf;
+		char *hex = "0123456789abcdef";
+		const unsigned char *bytes = 
+		  (const unsigned char *)snd_ctl_elem_value_get_bytes(ctl);
+		for (idx = 0; idx < size; idx++) {
+			int v = bytes[idx];
+			*p++ = hex[v >> 4];
+			*p++ = hex[v & 0x0f];
+		}
+		*p = '\0';
+		err = snd_config_string_add(control, "value", buf);
+		if (err < 0) {
+			error("snd_config_string_add: %s", snd_strerror(err));
+			return err;
+		}
+		return 0;
+	}
+	default:
+		break;
+	}
+
+	if (count == 1) {
+		switch (type) {
+		case SND_CTL_ELEM_TYPE_BOOLEAN:
+			err = snd_config_string_add(control, "value", snd_ctl_elem_value_get_boolean(ctl, 0) ? "true" : "false");
+			if (err < 0) {
+				error("snd_config_string_add: %s", snd_strerror(err));
+				return err;
+			}
+			return 0;
+		case SND_CTL_ELEM_TYPE_INTEGER:
+			err = snd_config_integer_add(control, "value", snd_ctl_elem_value_get_integer(ctl, 0));
+			if (err < 0) {
+				error("snd_config_integer_add: %s", snd_strerror(err));
+				return err;
+			}
+			return 0;
+		case SND_CTL_ELEM_TYPE_INTEGER64:
+			err = snd_config_integer64_add(control, "value", snd_ctl_elem_value_get_integer64(ctl, 0));
+			if (err < 0) {
+				error("snd_config_integer64_add: %s", snd_strerror(err));
+				return err;
+			}
+			return 0;
+		case SND_CTL_ELEM_TYPE_ENUMERATED:
+		{
+			unsigned int v = snd_ctl_elem_value_get_enumerated(ctl, 0);
+			snd_config_t *c;
+			err = snd_config_search(item, num_str(v), &c);
+			if (err == 0) {
+				err = snd_config_get_string(c, &s);
+				assert(err == 0);
+				err = snd_config_string_add(control, "value", s);
+			} else {
+				err = snd_config_integer_add(control, "value", v);
+			}
+			if (err < 0)
+				error("snd_config add: %s", snd_strerror(err));
+			return 0;
+		}
+		default:
+			error("Unknown control type: %d\n", type);
+			return -EINVAL;
+		}
+	}
+
+	err = snd_config_compound_add(control, "value", 1, &value);
+	if (err < 0) {
+		error("snd_config_compound_add: %s", snd_strerror(err));
+		return err;
+	}
+
+	switch (type) {
+	case SND_CTL_ELEM_TYPE_BOOLEAN:
+		for (idx = 0; idx < count; idx++) {
+			err = snd_config_string_add(value, num_str(idx), snd_ctl_elem_value_get_boolean(ctl, idx) ? "true" : "false");
+			if (err < 0) {
+				error("snd_config_string_add: %s", snd_strerror(err));
+				return err;
+			}
+		}
+		break;
+	case SND_CTL_ELEM_TYPE_INTEGER:
+		for (idx = 0; idx < count; idx++) {
+			err = snd_config_integer_add(value, num_str(idx), snd_ctl_elem_value_get_integer(ctl, idx));
+			if (err < 0) {
+				error("snd_config_integer_add: %s", snd_strerror(err));
+				return err;
+			}
+		}
+		break;
+	case SND_CTL_ELEM_TYPE_INTEGER64:
+		for (idx = 0; idx < count; idx++) {
+			err = snd_config_integer64_add(value, num_str(idx), snd_ctl_elem_value_get_integer64(ctl, idx));
+			if (err < 0) {
+				error("snd_config_integer64_add: %s", snd_strerror(err));
+				return err;
+			}
+		}
+		break;
+	case SND_CTL_ELEM_TYPE_ENUMERATED:
+		for (idx = 0; idx < count; idx++) {
+			unsigned int v = snd_ctl_elem_value_get_enumerated(ctl, idx);
+			snd_config_t *c;
+			err = snd_config_search(item, num_str(v), &c);
+			if (err == 0) {
+				err = snd_config_get_string(c, &s);
+				assert(err == 0);
+				err = snd_config_string_add(value, num_str(idx), s);
+			} else {
+				err = snd_config_integer_add(value, num_str(idx), v);
+			}
+			if (err < 0) {
+				error("snd_config add: %s", snd_strerror(err));
+				return err;
+			}
+		}
+		break;
+	default:
+		error("Unknown control type: %d\n", type);
+		return -EINVAL;
+	}
+	
+	return 0;
+}
+	
+static int get_controls(int cardno, snd_config_t *top)
+{
+	snd_ctl_t *handle;
+	snd_ctl_card_info_t *info;
+	snd_config_t *state, *card, *control;
+	snd_ctl_elem_list_t *list;
+	unsigned int idx;
+	int err;
+	char name[32];
+	unsigned int count;
+	const char *id;
+	snd_ctl_card_info_alloca(&info);
+	snd_ctl_elem_list_alloca(&list);
+
+	sprintf(name, "hw:%d", cardno);
+	err = snd_ctl_open(&handle, name, SND_CTL_READONLY);
+	if (err < 0) {
+		error("snd_ctl_open error: %s", snd_strerror(err));
+		return err;
+	}
+	err = snd_ctl_card_info(handle, info);
+	if (err < 0) {
+		error("snd_ctl_card_info error: %s", snd_strerror(err));
+		goto _close;
+	}
+	id = snd_ctl_card_info_get_id(info);
+	err = snd_config_search(top, "state", &state);
+	if (err == 0 &&
+	    snd_config_get_type(state) != SND_CONFIG_TYPE_COMPOUND) {
+		error("config state node is not a compound");
+		err = -EINVAL;
+		goto _close;
+	}
+	if (err < 0) {
+		err = snd_config_compound_add(top, "state", 1, &state);
+		if (err < 0) {
+			error("snd_config_compound_add: %s", snd_strerror(err));
+			goto _close;
+		}
+	}
+	err = snd_config_search(state, id, &card);
+	if (err == 0 &&
+	    snd_config_get_type(state) != SND_CONFIG_TYPE_COMPOUND) {
+		error("config state.%s node is not a compound", id);
+		err = -EINVAL;
+		goto _close;
+	}
+	if (err < 0) {
+		err = snd_config_compound_add(state, id, 0, &card);
+		if (err < 0) {
+			error("snd_config_compound_add: %s", snd_strerror(err));
+			goto _close;
+		}
+	}
+	err = snd_config_search(card, "control", &control);
+	if (err == 0) {
+		err = snd_config_delete(control);
+		if (err < 0) {
+			error("snd_config_delete: %s", snd_strerror(err));
+			goto _close;
+		}
+	}
+	err = snd_config_compound_add(card, "control", 1, &control);
+	if (err < 0) {
+		error("snd_config_compound_add: %s", snd_strerror(err));
+		goto _close;
+	}
+	err = snd_ctl_elem_list(handle, list);
+	if (err < 0) {
+		error("Cannot determine controls: %s", snd_strerror(err));
+		goto _close;
+	}
+	count = snd_ctl_elem_list_get_count(list);
+	if (count <= 0) {
+		err = 0;
+		goto _close;
+	}
+	snd_ctl_elem_list_set_offset(list, 0);
+	if (snd_ctl_elem_list_alloc_space(list, count) < 0) {
+		error("No enough memory...");
+		goto _close;
+	}
+	if ((err = snd_ctl_elem_list(handle, list)) < 0) {
+		error("Cannot determine controls (2): %s", snd_strerror(err));
+		goto _free;
+	}
+	for (idx = 0; idx < count; ++idx) {
+		snd_ctl_elem_id_t *id;
+		snd_ctl_elem_id_alloca(&id);
+		snd_ctl_elem_list_get_id(list, idx, id);
+		err = get_control(handle, id, control);
+		if (err < 0)
+			goto _free;
+	}		
+		
+	err = 0;
+ _free:
+	snd_ctl_elem_list_free_space(list);
+ _close:
+	snd_ctl_close(handle);
+	return err;
+}
+
+static long config_iface(snd_config_t *n)
+{
+	long i;
+	long long li;
+	snd_ctl_elem_iface_t idx; 
+	const char *str;
+	switch (snd_config_get_type(n)) {
+	case SND_CONFIG_TYPE_INTEGER:
+		snd_config_get_integer(n, &i);
+		return i;
+	case SND_CONFIG_TYPE_INTEGER64:
+		snd_config_get_integer64(n, &li);
+		return li;
+	case SND_CONFIG_TYPE_STRING:
+		snd_config_get_string(n, &str);
+		break;
+	default:
+		return -1;
+	}
+	for (idx = 0; idx <= SND_CTL_ELEM_IFACE_LAST; idx++) {
+		if (strcasecmp(snd_ctl_elem_iface_name(idx), str) == 0)
+			return idx;
+	}
+	return -1;
+}
+
+static int config_bool(snd_config_t *n)
+{
+	const char *str;
+	long val;
+	long long lval;
+	switch (snd_config_get_type(n)) {
+	case SND_CONFIG_TYPE_INTEGER:
+		snd_config_get_integer(n, &val);
+		if (val < 0 || val > 1)
+			return -1;
+		return val;
+	case SND_CONFIG_TYPE_INTEGER64:
+		snd_config_get_integer64(n, &lval);
+		if (lval < 0 || lval > 1)
+			return -1;
+		return (int) lval;
+	case SND_CONFIG_TYPE_STRING:
+		snd_config_get_string(n, &str);
+		break;
+	default:
+		return -1;
+	}
+	if (strcmp(str, "on") == 0 || strcmp(str, "true") == 0)
+		return 1;
+	if (strcmp(str, "off") == 0 || strcmp(str, "false") == 0)
+		return 0;
+	return -1;
+}
+
+static int config_enumerated(snd_config_t *n, snd_ctl_t *handle,
+			     snd_ctl_elem_info_t *info)
+{
+	const char *str;
+	long val;
+	long long lval;
+	unsigned int idx, items;
+	switch (snd_config_get_type(n)) {
+	case SND_CONFIG_TYPE_INTEGER:
+		snd_config_get_integer(n, &val);
+		return val;
+	case SND_CONFIG_TYPE_INTEGER64:
+		snd_config_get_integer64(n, &lval);
+		return (int) lval;
+	case SND_CONFIG_TYPE_STRING:
+		snd_config_get_string(n, &str);
+		break;
+	default:
+		return -1;
+	}
+	items = snd_ctl_elem_info_get_items(info);
+	for (idx = 0; idx < items; idx++) {
+		int err;
+		snd_ctl_elem_info_set_item(info, idx);
+		err = snd_ctl_elem_info(handle, info);
+		if (err < 0) {
+			error("snd_ctl_elem_info: %s", snd_strerror(err));
+			return err;
+		}
+		if (strcmp(str, snd_ctl_elem_info_get_item_name(info)) == 0)
+			return idx;
+	}
+	return -1;
+}
+
+static int set_control(snd_ctl_t *handle, snd_config_t *control)
+{
+	snd_ctl_elem_value_t *ctl;
+	snd_ctl_elem_info_t *info;
+	snd_config_iterator_t i, next;
+	unsigned int numid1;
+	snd_ctl_elem_iface_t iface = -1;
+	int iface1;
+	const char *name1;
+	unsigned int numid;
+	snd_ctl_elem_type_t type;
+	unsigned int count;
+	long device = -1;
+	long device1;
+	long subdevice = -1;
+	long subdevice1;
+	const char *name = NULL;
+	long index1;
+	long index = -1;
+	snd_config_t *value = NULL;
+	long val;
+	long long lval;
+	unsigned int idx;
+	int err;
+	char *set;
+	const char *id;
+	snd_ctl_elem_value_alloca(&ctl);
+	snd_ctl_elem_info_alloca(&info);
+	if (snd_config_get_type(control) != SND_CONFIG_TYPE_COMPOUND) {
+		error("control is not a compound");
+		return -EINVAL;
+	}
+	err = snd_config_get_id(control, &id);
+	if (err < 0) {
+		error("unable to get id");
+		return -EINVAL;
+	}
+	numid = atoi(id);
+	snd_config_for_each(i, next, control) {
+		snd_config_t *n = snd_config_iterator_entry(i);
+		const char *fld;
+		if (snd_config_get_id(n, &fld) < 0)
+			continue;
+		if (strcmp(fld, "comment") == 0)
+			continue;
+		if (strcmp(fld, "iface") == 0) {
+			iface = (snd_ctl_elem_iface_t)config_iface(n);
+			if (iface < 0) {
+				error("control.%d.%s is invalid", numid, fld);
+				return -EINVAL;
+			}
+			continue;
+		}
+		if (strcmp(fld, "device") == 0) {
+			if (snd_config_get_type(n) != SND_CONFIG_TYPE_INTEGER) {
+				error("control.%d.%s is invalid", numid, fld);
+				return -EINVAL;
+			}
+			snd_config_get_integer(n, &device);
+			continue;
+		}
+		if (strcmp(fld, "subdevice") == 0) {
+			if (snd_config_get_type(n) != SND_CONFIG_TYPE_INTEGER) {
+				error("control.%d.%s is invalid", numid, fld);
+				return -EINVAL;
+			}
+			snd_config_get_integer(n, &subdevice);
+			continue;
+		}
+		if (strcmp(fld, "name") == 0) {
+			if (snd_config_get_type(n) != SND_CONFIG_TYPE_STRING) {
+				error("control.%d.%s is invalid", numid, fld);
+				return -EINVAL;
+			}
+			snd_config_get_string(n, &name);
+			continue;
+		}
+		if (strcmp(fld, "index") == 0) {
+			if (snd_config_get_type(n) != SND_CONFIG_TYPE_INTEGER) {
+				error("control.%d.%s is invalid", numid, fld);
+				return -EINVAL;
+			}
+			snd_config_get_integer(n, &index);
+			continue;
+		}
+		if (strcmp(fld, "value") == 0) {
+			value = n;
+			continue;
+		}
+		error("unknown control.%d.%s field", numid, fld);
+	}
+	if (!value) {
+		error("missing control.%d.value", numid);
+		return -EINVAL;
+	}
+	if (device < 0)
+		device = 0;
+	if (subdevice < 0)
+		subdevice = 0;
+	if (index < 0)
+		index = 0;
+
+	err = -EINVAL;
+	if (! force_restore) {
+		snd_ctl_elem_info_set_numid(info, numid);
+		err = snd_ctl_elem_info(handle, info);
+	}
+	if (err < 0) {
+		if (iface >= 0 && name) {
+			snd_ctl_elem_info_set_numid(info, 0);
+			snd_ctl_elem_info_set_interface(info, iface);
+			snd_ctl_elem_info_set_device(info, device);
+			snd_ctl_elem_info_set_subdevice(info, subdevice);
+			snd_ctl_elem_info_set_name(info, name);
+			snd_ctl_elem_info_set_index(info, index);
+			err = snd_ctl_elem_info(handle, info);
+		}
+	}
+	if (err < 0) {
+		error("failed to obtain info for control #%d (%s)", numid, snd_strerror(err));
+		return -ENOENT;
+	}
+	numid1 = snd_ctl_elem_info_get_numid(info);
+	iface1 = snd_ctl_elem_info_get_interface(info);
+	device1 = snd_ctl_elem_info_get_device(info);
+	subdevice1 = snd_ctl_elem_info_get_subdevice(info);
+	name1 = snd_ctl_elem_info_get_name(info);
+	index1 = snd_ctl_elem_info_get_index(info);
+	count = snd_ctl_elem_info_get_count(info);
+	type = snd_ctl_elem_info_get_type(info);
+	if (numid != numid1)
+		error("warning: numid mismatch (%d/%d) for control #%d", 
+		      numid, numid1, numid);
+	if (iface != iface1)
+		error("warning: iface mismatch (%d/%d) for control #%d", iface, iface1, numid);
+	if (device != device1)
+		error("warning: device mismatch (%ld/%ld) for control #%d", device, device1, numid);
+	if (subdevice != subdevice1)
+		error("warning: subdevice mismatch (%ld/%ld) for control #%d", subdevice, subdevice1, numid);
+	if (strcmp(name, name1))
+		error("warning: name mismatch (%s/%s) for control #%d", name, name1, numid);
+	if (index != index1)
+		error("warning: index mismatch (%ld/%ld) for control #%d", index, index1, numid);
+
+	if (!snd_ctl_elem_info_is_writable(info))
+		return 0;
+	snd_ctl_elem_value_set_numid(ctl, numid1);
+
+	if (count == 1) {
+		switch (type) {
+		case SND_CTL_ELEM_TYPE_BOOLEAN:
+			val = config_bool(value);
+			if (val >= 0) {
+				snd_ctl_elem_value_set_boolean(ctl, 0, val);
+				goto _ok;
+			}
+			break;
+		case SND_CTL_ELEM_TYPE_INTEGER:
+			err = snd_config_get_integer(value, &val);
+			if (err == 0) {
+				snd_ctl_elem_value_set_integer(ctl, 0, val);
+				goto _ok;
+			}
+			break;
+		case SND_CTL_ELEM_TYPE_INTEGER64:
+			err = snd_config_get_integer64(value, &lval);
+			if (err == 0) {
+				snd_ctl_elem_value_set_integer64(ctl, 0, lval);
+				goto _ok;
+			}
+			break;
+		case SND_CTL_ELEM_TYPE_ENUMERATED:
+			val = config_enumerated(value, handle, info);
+			if (val >= 0) {
+				snd_ctl_elem_value_set_enumerated(ctl, 0, val);
+				goto _ok;
+			}
+			break;
+		case SND_CTL_ELEM_TYPE_BYTES:
+		case SND_CTL_ELEM_TYPE_IEC958:
+			break;
+		default:
+			error("Unknow control type: %d", type);
+			return -EINVAL;
+		}
+	}
+	switch (type) {
+	case SND_CTL_ELEM_TYPE_BYTES:
+	case SND_CTL_ELEM_TYPE_IEC958:
+	{
+		const char *buf;
+		err = snd_config_get_string(value, &buf);
+		if (err >= 0) {
+			int c1 = 0;
+			int len = strlen(buf);
+			unsigned int idx = 0;
+			int size = type == SND_CTL_ELEM_TYPE_BYTES ?
+				count : sizeof(snd_aes_iec958_t);
+			if (size * 2 != len) {
+				error("bad control.%d.value contents\n", numid);
+				return -EINVAL;
+			}
+			while (*buf) {
+				int c = *buf++;
+				if (c >= '0' && c <= '9')
+					c -= '0';
+				else if (c >= 'a' && c <= 'f')
+					c = c - 'a' + 10;
+				else if (c >= 'A' && c <= 'F')
+					c = c - 'A' + 10;
+				else {
+					error("bad control.%d.value contents\n", numid);
+					return -EINVAL;
+				}
+				if (idx % 2 == 1)
+					snd_ctl_elem_value_set_byte(ctl, idx / 2, c1 << 4 | c);
+				else
+					c1 = c;
+				idx++;
+			}
+			goto _ok;
+		}
+	}
+	default:
+		break;
+	}
+	if (snd_config_get_type(value) != SND_CONFIG_TYPE_COMPOUND) {
+		error("bad control.%d.value type", numid);
+		return -EINVAL;
+	}
+
+	set = (char*) alloca(count);
+	memset(set, 0, count);
+	snd_config_for_each(i, next, value) {
+		snd_config_t *n = snd_config_iterator_entry(i);
+		const char *id;
+		if (snd_config_get_id(n, &id) < 0)
+			continue;
+		idx = atoi(id);
+		if (idx < 0 || idx >= count || 
+		    set[idx]) {
+			error("bad control.%d.value index", numid);
+			return -EINVAL;
+		}
+		switch (type) {
+		case SND_CTL_ELEM_TYPE_BOOLEAN:
+			val = config_bool(n);
+			if (val < 0) {
+				error("bad control.%d.value.%d content", numid, idx);
+				return -EINVAL;
+			}
+			snd_ctl_elem_value_set_boolean(ctl, idx, val);
+			break;
+		case SND_CTL_ELEM_TYPE_INTEGER:
+			err = snd_config_get_integer(n, &val);
+			if (err < 0) {
+				error("bad control.%d.value.%d content", numid, idx);
+				return -EINVAL;
+			}
+			snd_ctl_elem_value_set_integer(ctl, idx, val);
+			break;
+		case SND_CTL_ELEM_TYPE_INTEGER64:
+			err = snd_config_get_integer64(n, &lval);
+			if (err < 0) {
+				error("bad control.%d.value.%d content", numid, idx);
+				return -EINVAL;
+			}
+			snd_ctl_elem_value_set_integer64(ctl, idx, lval);
+			break;
+		case SND_CTL_ELEM_TYPE_ENUMERATED:
+			val = config_enumerated(n, handle, info);
+			if (val < 0) {
+				error("bad control.%d.value.%d content", numid, idx);
+				return -EINVAL;
+			}
+			snd_ctl_elem_value_set_enumerated(ctl, idx, val);
+			break;
+		case SND_CTL_ELEM_TYPE_BYTES:
+		case SND_CTL_ELEM_TYPE_IEC958:
+			err = snd_config_get_integer(n, &val);
+			if (err < 0 || val < 0 || val > 255) {
+				error("bad control.%d.value.%d content", numid, idx);
+				return -EINVAL;
+			}
+			snd_ctl_elem_value_set_byte(ctl, idx, val);
+			break;
+		default:
+			break;
+		}
+		set[idx] = 1;
+	}
+	for (idx = 0; idx < count; ++idx) {
+		if (!set[idx]) {
+			error("control.%d.value.%d is not specified", numid, idx);
+			return -EINVAL;
+		}
+	}
+
+ _ok:
+	err = snd_ctl_elem_write(handle, ctl);
+	if (err < 0) {
+		error("Cannot write control '%d:%ld:%ld:%s:%ld' : %s", (int)iface, device, subdevice, name, index, snd_strerror(err));
+		return err;
+	}
+	return 0;
+}
+
+static int set_controls(int card, snd_config_t *top)
+{
+	snd_ctl_t *handle;
+	snd_ctl_card_info_t *info;
+	snd_config_t *control;
+	snd_config_iterator_t i, next;
+	int err;
+	char name[32];
+	const char *id;
+	snd_ctl_card_info_alloca(&info);
+
+	sprintf(name, "hw:%d", card);
+	err = snd_ctl_open(&handle, name, 0);
+	if (err < 0) {
+		error("snd_ctl_open error: %s", snd_strerror(err));
+		return err;
+	}
+	err = snd_ctl_card_info(handle, info);
+	if (err < 0) {
+		error("snd_ctl_card_info error: %s", snd_strerror(err));
+		goto _close;
+	}
+	id = snd_ctl_card_info_get_id(info);
+	err = snd_config_searchv(top, &control, "state", id, "control", 0);
+	if (err < 0) {
+		err = 0;
+		fprintf(stderr, "No state is present for card %s\n", id);
+		goto _close;
+	}
+	if (snd_config_get_type(control) != SND_CONFIG_TYPE_COMPOUND) {
+		error("state.%s.control is not a compound\n", id);
+		return -EINVAL;
+	}
+	snd_config_for_each(i, next, control) {
+		snd_config_t *n = snd_config_iterator_entry(i);
+		err = set_control(handle, n);
+		if (err < 0 && ! force_restore)
+			goto _close;
+	}
+
+ _close:
+	snd_ctl_close(handle);
+	return err;
+}
+
+static int save_state(char *file, const char *cardname)
+{
+	int err;
+	snd_config_t *config;
+	snd_input_t *in;
+	snd_output_t *out;
+	int stdio;
+
+	err = snd_config_top(&config);
+	if (err < 0) {
+		error("snd_config_top error: %s", snd_strerror(err));
+		return err;
+	}
+	stdio = !strcmp(file, "-");
+	if (!stdio && (err = snd_input_stdio_open(&in, file, "r")) >= 0) {
+		err = snd_config_load(config, in);
+		snd_input_close(in);
+#if 0
+		if (err < 0) {
+			error("snd_config_load error: %s", snd_strerror(err));
+			return err;
+		}
+#endif
+	}
+
+	if (!cardname) {
+		int card, first = 1;
+
+		card = -1;
+		/* find each installed soundcards */
+		while (1) {
+			if (snd_card_next(&card) < 0)
+				break;
+			if (card < 0) {
+				if (first) {
+					error("No soundcards found...");
+					return -ENODEV;
+				}
+				break;
+			}
+			first = 0;
+			if ((err = get_controls(card, config)))
+				return err;
+		}
+	} else {
+		int cardno;
+
+		cardno = snd_card_get_index(cardname);
+		if (cardno < 0) {
+			error("Cannot find soundcard '%s'...", cardname);
+			return cardno;
+		}
+		if ((err = get_controls(cardno, config))) {
+			return err;
+		}
+	}
+	
+	if (stdio)
+		err = snd_output_stdio_attach(&out, stdout, 0);
+	else
+		err = snd_output_stdio_open(&out, file, "w");
+	if (err < 0) {
+		error("Cannot open %s for writing", file);
+		return -errno;
+	}
+	err = snd_config_save(config, out);
+	snd_output_close(out);
+	if (err < 0)
+		error("snd_config_save: %s", snd_strerror(err));
+	return 0;
+}
+
+int load_state(const char *file, const char *cardname)
+{
+	int err;
+	snd_config_t *config;
+	snd_input_t *in;
+	int stdio;
+
+	err = snd_config_top(&config);
+	if (err < 0) {
+		error("snd_config_top error: %s", snd_strerror(err));
+		return err;
+	}
+	stdio = !strcmp(file, "-");
+	if (stdio)
+		err = snd_input_stdio_attach(&in, stdin, 0);
+	else
+		err = snd_input_stdio_open(&in, file, "r");
+	if (err >= 0) {
+		err = snd_config_load(config, in);
+		snd_input_close(in);
+		if (err < 0) {
+			error("snd_config_load error: %s", snd_strerror(err));
+			return err;
+		}
+	}
+
+	if (!cardname) {
+		int card, first = 1;
+
+		card = -1;
+		/* find each installed soundcards */
+		while (1) {
+			if (snd_card_next(&card) < 0)
+				break;
+			if (card < 0) {
+				if (first) {
+					error("No soundcards found...");
+					return -ENODEV;
+				}
+				break;
+			}
+			first = 0;
+			if ((err = set_controls(card, config)) && ! force_restore)
+				return err;
+		}
+	} else {
+		int cardno;
+
+		cardno = snd_card_get_index(cardname);
+		if (cardno < 0) {
+			error("Cannot find soundcard '%s'...", cardname);
+			return -ENODEV;
+		}
+		if ((err = set_controls(cardno, config)) && ! force_restore) {
+			return err;
+		}
+	}
+	return 0;
+}
+
+static int get_int_state(const char *str)
+{
+	if (!strcasecmp(str, "on"))
+		return SND_CTL_POWER_D0;
+	if (!strcasecmp(str, "off"))
+		return SND_CTL_POWER_D3hot;
+	if (*str == 'D' || *str == 'd') {
+		str++;
+		if (!strcmp(str, "0"))
+			return SND_CTL_POWER_D0;
+		if (!strcmp(str, "1"))
+			return SND_CTL_POWER_D1;
+		if (!strcmp(str, "2"))
+			return SND_CTL_POWER_D2;
+		if (!strcmp(str, "3"))
+			return SND_CTL_POWER_D3;
+		if (!strcmp(str, "3hot"))
+			return SND_CTL_POWER_D3hot;
+		if (!strcmp(str, "3cold"))
+			return SND_CTL_POWER_D3cold;
+	}
+	return -1;
+}
+
+static const char *get_str_state(int power_state)
+{
+	static char str[16];
+
+	switch (power_state) {
+	case SND_CTL_POWER_D0:
+		return "D0";
+	case SND_CTL_POWER_D1:
+		return "D1";
+	case SND_CTL_POWER_D2:
+		return "D2";
+	// return SND_CTL_POWER_D3;	/* it's same as D3hot */
+	case SND_CTL_POWER_D3hot:
+		return "D3hot";
+	case SND_CTL_POWER_D3cold:
+		return "D3cold";
+	default:
+		sprintf(str, "???0x%x", power_state);
+		return str;
+	}
+}
+
+static int show_power(int cardno)
+{
+	snd_ctl_t *handle;
+	char name[16];
+	unsigned int power_state;
+	int err;
+
+	sprintf(name, "hw:%d", cardno);
+	err = snd_ctl_open(&handle, name, 0);
+	if (err < 0) {
+		error("snd_ctl_open error: %s", snd_strerror(err));
+		return err;
+	}
+	err = snd_ctl_get_power_state(handle, &power_state);
+	if (err < 0) {
+		error("snd_ctl_get_power_state error: %s", snd_strerror(err));
+		snd_ctl_close(handle);
+		return err;
+	}
+	snd_ctl_close(handle);
+	printf("Power state for card #%d is %s\n", cardno, get_str_state(power_state));
+	return 0;
+}
+
+static int set_power(int cardno, unsigned int power_state)
+{
+	snd_ctl_t *handle;
+	char name[16];
+	int err;
+
+	sprintf(name, "hw:%d", cardno);
+	err = snd_ctl_open(&handle, name, 0);
+	if (err < 0) {
+		error("snd_ctl_open error: %s", snd_strerror(err));
+		return err;
+	}
+	err = snd_ctl_set_power_state(handle, power_state);
+	if (err < 0) {
+		error("snd_ctl_set_power_state error: %s", snd_strerror(err));
+		snd_ctl_close(handle);
+		return err;
+	}
+	err = snd_ctl_get_power_state(handle, &power_state);
+	if (err < 0) {
+		error("snd_ctl_get_power_state error: %s", snd_strerror(err));
+		snd_ctl_close(handle);
+		return err;
+	}
+	snd_ctl_close(handle);
+	printf("Power state for card #%d is %s\n", cardno, get_str_state(power_state));
+	return 0;
+}
+
+static int power(const char *argv[], int argc)
+{
+	int power_state, err;
+	
+	if (argc == 0) {		/* show status only */
+		int card, first = 1;
+
+		card = -1;
+		/* find each installed soundcards */
+		while (1) {
+			if (snd_card_next(&card) < 0)
+				break;
+			if (card < 0) {
+				if (first) {
+					error("No soundcards found...");
+					return -ENODEV;
+				}
+				break;
+			}
+			first = 0;
+			if ((err = show_power(card)) < 0)
+				return err;
+		}
+		return 0;
+	}
+	power_state = get_int_state(argv[0]);
+	if (power_state >= 0) {
+		int card, first = 1;
+
+		card = -1;
+		/* find each installed soundcards */
+		while (1) {
+			if (snd_card_next(&card) < 0)
+				break;
+			if (card < 0) {
+				if (first) {
+					error("No soundcards found...");
+					return -ENODEV;
+				}
+				break;
+			}
+			first = 0;
+			if ((err = set_power(card, power_state)))
+				return err;
+		}
+	} else {
+		int cardno;
+
+		cardno = snd_card_get_index(argv[0]);
+		if (cardno < 0) {
+			error("Cannot find soundcard '%s'...", argv[0]);
+			return -ENODEV;
+		}
+		if (argc > 1) {
+			power_state = get_int_state(argv[1]);
+			if (power_state < 0) {
+				error("Invalid power state '%s'...", argv[1]);
+				return -EINVAL;
+			}
+			if ((err = set_power(cardno, power_state)) < 0)
+				return err;
+		} else {
+			if ((err = show_power(cardno)) < 0)
+				return err;
+		}
+	}
+	return 0;
+}
+
+int main(int argc, char *argv[])
+{
+	int morehelp;
+	struct option long_option[] =
+	{
+		{"help", 0, NULL, 'h'},
+		{"file", 1, NULL, 'f'},
+		{"force", 1, NULL, 'F'},
+		{"debug", 0, NULL, 'd'},
+		{"version", 0, NULL, 'v'},
+		{NULL, 0, NULL, 0},
+	};
+	char *cfgfile = SYS_ASOUNDRC;
+	int res;
+
+	command = argv[0];
+	morehelp = 0;
+	while (1) {
+		int c;
+
+		if ((c = getopt_long(argc, argv, "hf:Fdv", long_option, NULL)) < 0)
+			break;
+		switch (c) {
+		case 'h':
+			morehelp++;
+			break;
+		case 'f':
+			cfgfile = optarg;
+			break;
+		case 'F':
+			force_restore = 1;
+			break;
+		case 'd':
+			debugflag = 1;
+			break;
+		case 'v':
+			printf("alsactl version " SND_UTIL_VERSION_STR "\n");
+			return EXIT_SUCCESS;
+		case '?':		// error msg already printed
+			morehelp++;
+			break;
+		default:		// should never happen
+			fprintf(stderr, 
+			"Invalid option '%c' (%d) not handled??\n", c, c);
+		}
+	}
+	if (morehelp) {
+		help();
+		return EXIT_SUCCESS;
+	}
+	if (argc - optind <= 0) {
+		fprintf(stderr, "alsactl: Specify command...\n");
+		return 0;
+	}
+
+	if (!strcmp(argv[optind], "store")) {
+		res =  save_state(cfgfile,
+		   argc - optind > 1 ? argv[optind + 1] : NULL);
+	} else if (!strcmp(argv[optind], "restore")) {
+		res = load_state(cfgfile, 
+		   argc - optind > 1 ? argv[optind + 1] : NULL);
+	} else if (!strcmp(argv[optind], "power")) {
+		res = power((const char **)argv + optind + 1, argc - optind - 1);
+	} else {
+		fprintf(stderr, "alsactl: Unknown command '%s'...\n", 
+			argv[optind]);
+		res = -ENODEV;
+	}
+
+	return res < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+}
Index: debian/alsa-utils/alsamixer/Makefile.am
diff -u debian/alsa-utils/alsamixer/Makefile.am:1.3 debian/alsa-utils/alsamixer/Makefile.am:1.4
--- debian/alsa-utils/alsamixer/Makefile.am:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsamixer/Makefile.am	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,9 @@
+LDADD = $(CURSESLIB)
+
+bin_PROGRAMS = alsamixer
+man_MANS = alsamixer.1
+EXTRA_DIST = alsamixer.1
+alsamixer_INCLUDES = -I$(top_srcdir)/include -DCURSESINC="$(CURSESINC)"
+
+#LDFLAGS = -static
+#CFLAGS += -g -Wall
Index: debian/alsa-utils/alsamixer/Makefile.in
diff -u debian/alsa-utils/alsamixer/Makefile.in:1.3 debian/alsa-utils/alsamixer/Makefile.in:1.4
--- debian/alsa-utils/alsamixer/Makefile.in:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsamixer/Makefile.in	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,359 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+LDADD = $(CURSESLIB)
+
+bin_PROGRAMS = alsamixer
+man_MANS = alsamixer.1
+EXTRA_DIST = alsamixer.1
+alsamixer_INCLUDES = -I$(top_srcdir)/include -DCURSESINC="$(CURSESINC)"
+subdir = alsamixer
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = alsamixer$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+alsamixer_SOURCES = alsamixer.c
+alsamixer_OBJECTS = alsamixer.$(OBJEXT)
+alsamixer_LDADD = $(LDADD)
+alsamixer_DEPENDENCIES =
+alsamixer_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/alsamixer.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = alsamixer.c
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = README Makefile.am Makefile.in
+SOURCES = alsamixer.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  alsamixer/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+alsamixer$(EXEEXT): $(alsamixer_OBJECTS) $(alsamixer_DEPENDENCIES) 
+	@rm -f alsamixer$(EXEEXT)
+	$(LINK) $(alsamixer_LDFLAGS) $(alsamixer_OBJECTS) $(alsamixer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alsamixer.Po@am__quote@
+
+distclean-depend:
+	-rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+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/^.*\\.//'`; \
+	  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/^.*\\.//'`; \
+	  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
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic distclean distclean-compile distclean-depend \
+	distclean-generic distclean-tags distdir dvi dvi-am info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-man1 install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+	uninstall-man1
+
+
+#LDFLAGS = -static
+#CFLAGS += -g -Wall
+# 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:
Index: debian/alsa-utils/alsamixer/README
diff -u debian/alsa-utils/alsamixer/README:1.3 debian/alsa-utils/alsamixer/README:1.4
--- debian/alsa-utils/alsamixer/README:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsamixer/README	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,84 @@
+Using Alsamixer
+===============
+
+Alsamixer uses an ncurses interface, which may not display properly in
+an xterm.
+
+Start it by typing "alsamixer".
+
+Optional flags:
+alsamixer -h displays the available flags.
+alsamixer -e starts in "exact" mode. See below...
+alsamixer -c N selects the soundcard to control, where N is the number of
+the card, counting from 1.
+alsamixer -m selects which mixer device to control, counting from 0. This
+is only applicable to soundcards that have more than one mixer to 
+control. It is the same as the amixer -d flag.
+
+
+Keyboard commands:
+==================
+
+Left & right arrow keys are used to select the channel (or device,
+depending on your preferred terminology). You can also use n (next) 
+and p (previous).
+
+Up/down arrows control the volume for the currently selected device.
+Both the left & right signals are controlled.
+You can also use "+" or "-" to turn volumes up or down.
+
+"M" toggles muting for the current channel (both left and right). You can
+mute left and right independently by using , and . respectively.
+
+SPACE toggles recording: the current channel will be added or removed from
+the sources used for recording. This only works on valid input channels,
+of course.
+
+"L" re-draws the screen.
+
+TAB does something interesting: it toggles the mode for volume display.
+This affects the numbers you see, but not the operation of the level
+controls. There seem to be two modes: one is percentages from 0-100, the
+other is called "exact mode" and varies from channel to channel. This
+shows you the settings as the soundcard understands them. All the channel
+level ranges are from 0 to a power of 2 minus one (e.g. 0-31 or 0-63).
+
+Quick Volume Changes
+--------------------
+
+PageUp increases volume by 10.
+PageDown decreases volume by 10.
+Home sets volume to 100.
+End sets volume to 0.
+
+You can also control left & right levels for the current channel
+independently,
+according to this chart:
+
+Q  |  W  |  E    <-- UP
+-------------
+Z  |  X  |  C    <---DOWN
+
+^     ^     ^
+|     |     +-- Right
+|     |
+|     +--- Both
+|
+Left
+
+
+If the current mixer channel is not a stereo channel, then all UP keys
+will work like W, and all DOWN keys will work like X.
+
+
+Exiting
+=======
+
+You can exit with ALT + Q, or by hitting ESC.
+
+
+-----------------------------------------------------------------
+
+Alsamixer has been written by Tim Janik <timj@gtk.org> and
+been furtherly improved by Jaroslav Kysela <perex@suse.cz>.
+This document was provided by Paul Winkler <zarmzarm@erols.com>.
Index: debian/alsa-utils/alsamixer/alsamixer.1
diff -u debian/alsa-utils/alsamixer/alsamixer.1:1.3 debian/alsa-utils/alsamixer/alsamixer.1:1.4
--- debian/alsa-utils/alsamixer/alsamixer.1:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsamixer/alsamixer.1	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,112 @@
+.TH ALSAMIXER 1 "15 May 2001"
+.SH NAME
+alsamixer \- soundcard mixer for ALSA soundcard driver, with ncurses interface
+.SH SYNOPSIS
+
+\fBalsamixer\fP [\fIoptions\fP]
+
+.SH DESCRIPTION
+\fBalsamixer\fP is an ncurses mixer program for use with the ALSA
+soundcard drivers. It supports multiple soundcards with multiple devices.
+
+.SH INVOKING
+
+\fBalsamixer\fP [\fIoptions\fP]
+
+.SS Options
+
+.TP
+\fI-h, -help\fP 
+Help: show available flags.
+
+.TP
+\fI-c\fP <card number or idenfication>
+Select the soundcard to use, if you have more than one. Cards are
+numbered from 0 (the default).
+
+.TP
+\fI-D\fP <device identification>
+Select the mixer device to control.
+
+.TP
+\fI-g\fP <toggle color settings>
+Toggle the using of colors.
+
+.TP
+\fI-s\fP <minimize mixer window>
+Minimize the mixer window.
+
+.SH KEYBOARD COMMANDS
+\fBalsamixer\fP recognizes the following keyboard commands to control the soundcard. 
+
+.SS
+General Controls
+
+The \fILeft\fP and \fIright arrow\fP keys are used to select the
+channel (or device, depending on your preferred terminology). You can
+also use \fIn\fP ("next") and \fIp\fP ("previous").
+
+The \fIUp\fP and \fIDown Arrows\fP control the volume for the
+currently selected device. You can also use \fI+\fP or \fI-\fP for the
+same purpose. Both the left and right signals are affected. For
+independent left and right control, see below.
+ 
+The \fIB\fP or \fI=\fP key adjusts the balance of volumes on left and
+right channels.
+
+\fIM\fP toggles muting for the current channel (both left and right). You can
+mute left and right independently by using \fI,\fP (or \fI<\fP) and
+\fI.\fP (or \fI>\fP) respectively.
+
+\fISPACE\fP toggles recording: the current channel will be added or
+removed from the sources used for recording. This only works for valid
+input channels, of course.
+You can toggle left and right independently by using \fIInsert\fP (or \fI;\fP)
+and \fIDelete\fP (or \fI'\fP) respectively.
+
+\fIL\fP re-draws the screen.
+
+.SS
+Quick Volume Changes
+
+\fIPageUp\fP increases volume by 5.
+
+\fIPageDown\fP decreases volume by 5.
+
+\fIEnd\fP sets volume to 0.
+
+You can also control left & right levels for the current channel
+independently, as follows:
+
+[\fIQ\fP | \fIW\fP | \fIE\fP ]  -- turn UP [ left | both | right ]
+
+[\fIZ\fP | \fIX\fP | \fIC\fP ] -- turn DOWN [ left | both | right ]   
+
+If the currently selected mixer channel is not a stereo channel, then
+all UP keys will work like \fIW\fP, and all DOWN keys will work like \fIX\fP.
+
+.SS
+Exiting
+
+Quit the program with \fIALT Q\fP, or by hitting \fIESC\fP.
+Please note that you might need to hit \fIESC\fP twice on some terminals
+since it's regarded as a prefix key.
+
+.SH SEE ALSO
+\fB
+amixer(1),
+aplay(1),
+arecord(1)
+\fP
+
+.SH BUGS 
+Some terminal emulators (e.g. \fBnxterm\fP) may not
+work quite right with ncurses, but that's their own damn
+fault. Plain old \fBxterm\fP seems to be fine.
+
+.SH AUTHOR
+.B alsamixer
+has been written by Tim Janik <timj@gtk.org> and
+been furtherly improved by Jaroslav Kysela <perex@suse.cz>.
+
+This manual page was provided by Paul Winkler <zarmzarm@erols.com>.
Index: debian/alsa-utils/alsamixer/alsamixer.c
diff -u debian/alsa-utils/alsamixer/alsamixer.c:1.3 debian/alsa-utils/alsamixer/alsamixer.c:1.4
--- debian/alsa-utils/alsamixer/alsamixer.c:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/alsamixer/alsamixer.c	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,2055 @@
+/* AlsaMixer - Commandline mixer for the ALSA project Copyright (C) 1998,
+ * 1999 Tim Janik <timj@gtk.org> and Jaroslav Kysela <perex@suse.cz>
+ *
+ * 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 Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * ChangeLog:
+ *
+ * Wed Feb 14 13:08:17 CET 2001   Jaroslav Kysela <perex@suse.cz>
+ *
+ *      * ported to the latest mixer 0.9.x API (function based)
+ *
+ * Fri Jun 23 14:10:00 MEST 2000  Jaroslav Kysela <perex@suse.cz>
+ *
+ *      * ported to new mixer 0.9.x API (simple control)
+ *      * improved error handling (mixer_abort)
+ *
+ * Thu Mar  9 22:54:16 MET 2000  Takashi iwai <iwai@ww.uni-erlangen.de>
+ *
+ *	* a group is split into front, rear, center and woofer elements.
+ *
+ * Mon Jan  3 23:33:42 MET 2000  Jaroslav Kysela <perex@suse.cz>
+ *
+ *      * version 1.00
+ *
+ *      * ported to new mixer API (scontrol control)
+ *
+ * Sun Feb 21 19:55:01 1999  Tim Janik  <timj@gtk.org>
+ *
+ *	* bumped version to 0.10.
+ *
+ *	* added scrollable text views.
+ *	we now feature an F1 Help screen and an F2 /proc info screen.
+ *	the help screen does still require lots of work though.
+ *
+ *	* keys are evaluated view specific now.
+ *
+ *	* we feature meta-keys now, e.g. M-Tab as back-tab.
+ *
+ *	* if we are already in channel view and the user still hits Return,
+ *	we do a refresh nonetheless, since 'r'/'R' got removed as a redraw
+ *	key (reserved for capture volumes). 'l'/'L' is still preserved though,
+ *	and actually needs to be to e.g. get around the xterm bold-artefacts.
+ *
+ *	* support terminals that can't write into lower right corner.
+ *
+ *	* undocumented '-s' option that will keep the screen to its
+ *	minimum size, usefull for debugging only.
+ *
+ * Sun Feb 21 02:23:52 1999  Tim Janik  <timj@gtk.org>
+ *
+ *	* don't abort if snd_mixer_* functions failed due to EINTR,
+ *	we simply retry on the next cycle. hopefully asoundlib preserves
+ *	errno states correctly (Jaroslav can you asure that?).
+ *
+ *	* feature WINCH correctly, so we make a complete relayout on
+ *	screen resizes. don't abort on too-small screen sizes anymore,
+ *	but simply beep.
+ *
+ *	* redid the layout algorithm to fix some bugs and to preserve
+ *	space for a flag indication line. the channels are
+ *	nicer spread horizontally now (i.e. we also pad on the left and
+ *	right screen bounds now).
+ *
+ *	* various other minor fixes.
+ *
+ *	* indicate whether ExactMode is active or not.
+ *
+ *	* fixed coding style to follow the GNU coding conventions.
+ *
+ *	* reverted capture volume changes since they broke ExactMode display.
+ *
+ *	* composed ChangeLog entries.
+ *
+ * 1998/11/04 19:43:45  perex
+ *
+ *	* Stereo capture source and route selection...
+ *	provided by Carl van Schaik <carl@dreamcoat.che.uct.ac.za>.
+ *
+ * 1998/09/20 08:05:24  perex
+ *
+ *	* Fixed -m option...
+ *
+ * 1998/10/29 22:50:10
+ *
+ *	* initial checkin of alsamixer.c, written by Tim Janik, modified by
+ *	Jaroslav Kysela to feature asoundlib.h instead of plain ioctl()s and
+ *	automated updates after select() (i always missed that with OSS!).
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#include <errno.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/signal.h>
+#include <sys/time.h>
+
+#ifndef CURSESINC
+#include <ncurses.h>
+#else
+#include CURSESINC
+#endif
+#include <time.h>
+
+#include <alsa/asoundlib.h>
+
+/* example compilation commandline:
+ * clear; gcc -Wall -pipe -O2 alsamixer.c -o alsamixer -lasound -lncurses
+ */
+
+/* --- defines --- */
+#define	PRGNAME		 "alsamixer"
+#define	PRGNAME_UPPER	 "AlsaMixer"
+#define	VERSION		 "v1.00"
+#define	CHECK_ABORT(e,s,n) ({ if ((n) != -EINTR) mixer_abort ((e), (s), (n)); })
+#define GETCH_BLOCK(w)	 ({ timeout ((w) ? -1 : 0); })
+
+#undef MAX
+#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
+#undef MIN
+#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
+#undef ABS
+#define ABS(a)     (((a) < 0) ? -(a) : (a))
+#undef CLAMP
+#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
+
+#define MIXER_MIN_X	(18)			/* abs minimum: 18 */
+#define	MIXER_TEXT_Y	(10)
+#define	MIXER_MIN_Y	(MIXER_TEXT_Y + 3)	/* abs minimum: 11 */
+
+#define MIXER_BLACK	(COLOR_BLACK)
+#define MIXER_DARK_RED  (COLOR_RED)
+#define MIXER_RED       (COLOR_RED | A_BOLD)
+#define MIXER_GREEN     (COLOR_GREEN | A_BOLD)
+#define MIXER_ORANGE    (COLOR_YELLOW)
+#define MIXER_YELLOW    (COLOR_YELLOW | A_BOLD)
+#define MIXER_MARIN     (COLOR_BLUE)
+#define MIXER_BLUE      (COLOR_BLUE | A_BOLD)
+#define MIXER_MAGENTA   (COLOR_MAGENTA)
+#define MIXER_DARK_CYAN (COLOR_CYAN)
+#define MIXER_CYAN      (COLOR_CYAN | A_BOLD)
+#define MIXER_GREY      (COLOR_WHITE)
+#define MIXER_GRAY      (MIXER_GREY)
+#define MIXER_WHITE     (COLOR_WHITE | A_BOLD)
+
+
+/* --- views --- */
+enum {
+  VIEW_CHANNELS,
+  VIEW_HELP,
+  VIEW_PROCINFO
+};
+
+
+/* --- variables --- */
+static WINDOW	*mixer_window = NULL;
+static int	 mixer_needs_resize = 0;
+static int	 mixer_minimize = 0;
+static int	 mixer_no_lrcorner = 0;
+static int	 mixer_view = VIEW_CHANNELS;
+static int	 mixer_max_x = 0;
+static int	 mixer_max_y = 0;
+static int	 mixer_ofs_x = 0;
+static float	 mixer_extra_space = 0;
+static int	 mixer_cbar_height = 0;
+
+static char	 card_id[64] = "default";
+static snd_mixer_t *mixer_handle;
+static char	 mixer_card_name[128];
+static char	 mixer_device_name[128];
+
+/* mixer bar channel : left or right */
+#define MIXER_CHN_LEFT		0
+#define MIXER_CHN_RIGHT		1
+/* mask for toggle mute and capture */
+#define MIXER_MASK_LEFT		(1 << 0)
+#define MIXER_MASK_RIGHT	(1 << 1)
+#define MIXER_MASK_STEREO	(MIXER_MASK_LEFT|MIXER_MASK_RIGHT)
+
+/* mixer split types */
+enum {
+  MIXER_ELEM_FRONT, MIXER_ELEM_REAR,
+  MIXER_ELEM_CENTER, MIXER_ELEM_WOOFER,
+  MIXER_ELEM_CAPTURE,
+  MIXER_ELEM_ENUM,
+  MIXER_ELEM_END
+};
+
+#define MIXER_ELEM_TYPE_MASK		0xff
+#define MIXER_ELEM_CAPTURE_SWITCH	0x100 /* bit */
+#define MIXER_ELEM_MUTE_SWITCH		0x200 /* bit */
+#define MIXER_ELEM_CAPTURE_SUFFIX	0x400
+#define MIXER_ELEM_HAS_VOLUME		0x800
+
+/* left and right channels for each type */
+static snd_mixer_selem_channel_id_t mixer_elem_chn[][2] = {
+  { SND_MIXER_SCHN_FRONT_LEFT, SND_MIXER_SCHN_FRONT_RIGHT },
+  { SND_MIXER_SCHN_REAR_LEFT, SND_MIXER_SCHN_REAR_RIGHT },
+  { SND_MIXER_SCHN_FRONT_CENTER, SND_MIXER_SCHN_UNKNOWN },
+  { SND_MIXER_SCHN_WOOFER, SND_MIXER_SCHN_UNKNOWN },
+  { SND_MIXER_SCHN_FRONT_LEFT, SND_MIXER_SCHN_FRONT_RIGHT },
+};
+
+static void 	*mixer_sid = NULL;
+static int	 mixer_n_selems = 0;
+static int       mixer_changed_state = 1;
+
+/* split scontrols */
+static int	 mixer_n_elems = 0;
+static int	 mixer_n_vis_elems = 0;
+static int	 mixer_first_vis_elem = 0;
+static int	 mixer_focus_elem = 0;
+static int	 mixer_have_old_focus = 0;
+static int *mixer_grpidx;
+static int *mixer_type;
+
+static int	 mixer_volume_delta[2];		/* left/right volume delta in % */
+static int	 mixer_balance_volumes = 0;	/* boolean */
+static unsigned	 mixer_toggle_mute = 0;		/* left/right mask */
+static unsigned	 mixer_toggle_capture = 0;	/* left/right mask */
+
+static int	 mixer_hscroll_delta = 0;
+static int	 mixer_vscroll_delta = 0;
+
+
+/* --- text --- */
+static int	 mixer_procinfo_xoffs = 0;
+static int	 mixer_procinfo_yoffs = 0;
+static int	 mixer_help_xoffs = 0;
+static int	 mixer_help_yoffs = 0;
+static char     *mixer_help_text =
+(
+ "\n"
+ " Esc     exit alsamixer\n"
+ " F1      show Help screen\n"
+ " F2      show /proc info screen\n"
+ " Return  return to main screen\n"
+ " Space   toggle Capture facility\n"
+ " Tab     toggle ExactMode\n"
+ " m M     mute both channels\n"
+ " < >     mute left/right channel\n"
+ " Up      increase left and right volume\n"
+ " Down    decrease left and right volume\n"
+ " Right   move (scroll) to the right next channel\n"
+ " Left    move (scroll) to the left next channel\n"
+ "\n"
+ "Alsamixer has been written and is Copyrighted in 1998, 1999 by\n"
+ "Tim Janik <timj@gtk.org> and Jaroslav Kysela <perex@suse.cz>.\n"
+ );
+
+
+/* --- draw contexts --- */
+enum {
+  DC_DEFAULT,
+  DC_BACK,
+  DC_TEXT,
+  DC_PROMPT,
+  DC_CBAR_MUTE,
+  DC_CBAR_NOMUTE,
+  DC_CBAR_CAPTURE,
+  DC_CBAR_NOCAPTURE,
+  DC_CBAR_EMPTY,
+  DC_CBAR_LABEL,
+  DC_CBAR_FOCUS_LABEL,
+  DC_FOCUS,
+  DC_ANY_1,
+  DC_ANY_2,
+  DC_ANY_3,
+  DC_ANY_4,
+  DC_LAST
+};
+
+static int dc_fg[DC_LAST] = { 0 };
+static int dc_attrib[DC_LAST] = { 0 };
+static int dc_char[DC_LAST] = { 0 };
+static int mixer_do_color = 1;
+
+static void
+mixer_init_dc (int c,
+	       int n,
+	       int f,
+	       int b,
+	       int a)
+{
+  dc_fg[n] = f;
+  dc_attrib[n] = a;
+  dc_char[n] = c;
+  if (n > 0)
+    init_pair (n, dc_fg[n] & 0xf, b & 0x0f);
+}
+
+static int
+mixer_dc (int n)
+{
+  if (mixer_do_color)
+    attrset (COLOR_PAIR (n) | (dc_fg[n] & 0xfffffff0));
+  else
+    attrset (dc_attrib[n]);
+  
+  return dc_char[n];
+}
+
+static void
+mixer_init_draw_contexts (void)
+{
+  start_color ();
+  
+  mixer_init_dc ('.', DC_BACK, MIXER_WHITE, MIXER_BLACK, A_NORMAL);
+  mixer_init_dc ('.', DC_TEXT, MIXER_YELLOW, MIXER_BLACK, A_BOLD);
+  mixer_init_dc ('.', DC_PROMPT, MIXER_DARK_CYAN, MIXER_BLACK, A_NORMAL);
+  mixer_init_dc ('M', DC_CBAR_MUTE, MIXER_CYAN, MIXER_BLACK, A_BOLD);
+  mixer_init_dc (ACS_HLINE, DC_CBAR_NOMUTE, MIXER_CYAN, MIXER_BLACK, A_BOLD);
+  mixer_init_dc ('x', DC_CBAR_CAPTURE, MIXER_DARK_RED, MIXER_BLACK, A_BOLD);
+  mixer_init_dc ('-', DC_CBAR_NOCAPTURE, MIXER_GRAY, MIXER_BLACK, A_NORMAL);
+  mixer_init_dc (' ', DC_CBAR_EMPTY, MIXER_GRAY, MIXER_BLACK, A_DIM);
+  mixer_init_dc ('.', DC_CBAR_LABEL, MIXER_WHITE, MIXER_BLUE, A_REVERSE | A_BOLD);
+  mixer_init_dc ('.', DC_CBAR_FOCUS_LABEL, MIXER_RED, MIXER_BLUE, A_REVERSE | A_BOLD);
+  mixer_init_dc ('.', DC_FOCUS, MIXER_RED, MIXER_BLACK, A_BOLD);
+  mixer_init_dc (ACS_BLOCK, DC_ANY_1, MIXER_WHITE, MIXER_BLACK, A_BOLD);
+  mixer_init_dc (ACS_BLOCK, DC_ANY_2, MIXER_GREEN, MIXER_BLACK, A_BOLD);
+  mixer_init_dc (ACS_BLOCK, DC_ANY_3, MIXER_RED, MIXER_BLACK, A_BOLD);
+  mixer_init_dc ('.', DC_ANY_4, MIXER_WHITE, MIXER_GREEN, A_BOLD);
+  mixer_init_dc ('.', DC_ANY_4, MIXER_WHITE, MIXER_BLUE, A_BOLD);
+}
+
+#define	DC_CBAR_FRAME	(DC_CBAR_MUTE)
+#define	DC_FRAME	(DC_PROMPT)
+
+
+/* --- error types --- */
+typedef enum
+{
+  ERR_NONE,
+  ERR_OPEN,
+  ERR_FCN,
+  ERR_SIGNAL,
+  ERR_WINSIZE,
+} ErrType;
+
+
+/* --- prototypes --- */
+static void
+mixer_abort (ErrType error,
+	     const char *err_string,
+	     int xerrno)
+     __attribute__
+((noreturn));
+
+
+/* --- functions --- */
+static void
+mixer_clear (int full_redraw)
+{
+  int x, y;
+  int f = full_redraw ? 0 : 1;
+
+  mixer_dc (DC_BACK);
+
+  if (full_redraw)
+    clearok (mixer_window, TRUE);
+
+  /* buggy ncurses doesn't really write spaces with the specified
+   * color into the screen on clear () or erase ()
+   */
+  for (x = f; x < mixer_max_x - f; x++)
+    for (y = f; y < mixer_max_y - f; y++)
+      mvaddch (y, x, ' ');
+}
+
+static void
+mixer_abort (ErrType     error,
+	     const char *err_string,
+	     int	 xerrno)
+{
+  if (mixer_window)
+    {
+      mixer_clear (TRUE);
+      refresh ();
+      keypad (mixer_window, FALSE);
+      leaveok (mixer_window, FALSE);
+      endwin ();
+      mixer_window = NULL;
+    }
+  printf ("\n");
+  
+  switch (error)
+    {
+    case ERR_OPEN:
+      fprintf (stderr,
+	       PRGNAME ": function %s failed for %s: %s\n",
+	       err_string,
+	       card_id,
+	       snd_strerror (xerrno));
+      break;
+    case ERR_FCN:
+      fprintf (stderr,
+	       PRGNAME ": function %s failed: %s\n",
+	       err_string,
+	       snd_strerror (xerrno));
+      break;
+    case ERR_SIGNAL:
+      fprintf (stderr,
+	       PRGNAME ": aborting due to signal `%s'\n",
+	       err_string);
+      break;
+    case ERR_WINSIZE:
+      fprintf (stderr,
+	       PRGNAME ": screen size too small (%dx%d)\n",
+	       mixer_max_x,
+	       mixer_max_y);
+      break;
+    default:
+      break;
+    }
+  
+  exit (error);
+}
+
+static int
+mixer_cbar_get_pos (int  elem_index,
+		    int *x_p,
+		    int *y_p)
+{
+  int x;
+  int y;
+  
+  if (elem_index < mixer_first_vis_elem ||
+      elem_index - mixer_first_vis_elem >= mixer_n_vis_elems)
+    return FALSE;
+  
+  elem_index -= mixer_first_vis_elem;
+  
+  x = mixer_ofs_x;
+  x += (3 + 2 + 3 + 1) * elem_index + mixer_extra_space * (elem_index + 1);
+
+  if (MIXER_TEXT_Y + 10 < mixer_max_y)
+    y = mixer_max_y / 2 + 3;
+  else
+    y = (mixer_max_y + 1) / 2 + 3;
+  y += mixer_cbar_height / 2;
+  
+  if (x_p)
+    *x_p = x;
+  if (y_p)
+    *y_p = y;
+  
+  return TRUE;
+}
+
+static int
+mixer_conv(int val, int omin, int omax, int nmin, int nmax)
+{
+	int orange = omax - omin, nrange = nmax - nmin;
+	
+	if (orange == 0)
+		return 0;
+	return ((nrange * (val - omin)) + (orange / 2)) / orange + nmin;
+}
+
+static int
+mixer_calc_volume(snd_mixer_elem_t *elem,
+		  int vol, int type,
+		  snd_mixer_selem_channel_id_t chn)
+{
+  int vol1;
+  long v;
+  long min, max;
+  if (type != MIXER_ELEM_CAPTURE)
+    snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
+  else
+    snd_mixer_selem_get_capture_volume_range(elem, &min, &max);
+  vol1 = (vol < 0) ? -vol : vol;
+  if (vol1 > 0) {
+    if (vol1 > 100)
+      vol1 = max;
+    else
+      vol1 = mixer_conv(vol1, 0, 100, min, max);
+    if (vol1 <= 0)
+      vol1 = 1;
+    if (vol < 0)
+      vol1 = -vol1;
+  }
+  if (type != MIXER_ELEM_CAPTURE)
+    snd_mixer_selem_get_playback_volume(elem, chn, &v);
+  else
+    snd_mixer_selem_get_capture_volume(elem, chn, &v);
+  vol1 += v;
+  return CLAMP(vol1, min, max);
+}
+
+/* update enum list */
+static void update_enum_list(snd_mixer_elem_t *elem, int chn, int delta)
+{
+  int eidx;
+  if (snd_mixer_selem_get_enum_item(elem, chn, &eidx) < 0)
+    return;
+  if (delta < 0) {
+    eidx--;
+    if (eidx < 0)
+      return;
+  } else {
+    int items = snd_mixer_selem_get_enum_items(elem);
+    if (items < 0)
+      return;
+    eidx++;
+    if (eidx >= items)
+      return;
+  }
+  snd_mixer_selem_set_enum_item(elem, chn, eidx);
+}
+
+/* set new channel values
+ */
+static void
+mixer_write_cbar (int elem_index)
+{
+  snd_mixer_elem_t *elem;
+  int vleft, vright, vbalance;
+  int type;
+  snd_mixer_selem_id_t *sid;
+  snd_mixer_selem_channel_id_t chn_left, chn_right, chn;
+  int sw;
+
+  if (mixer_sid == NULL)
+    return;
+  
+  sid = (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * mixer_grpidx[elem_index]);
+  elem = snd_mixer_find_selem(mixer_handle, sid);
+  if (elem == NULL)
+    CHECK_ABORT (ERR_FCN, "snd_mixer_find_selem()", -EINVAL);
+  type = mixer_type[elem_index] & MIXER_ELEM_TYPE_MASK;
+  chn_left = mixer_elem_chn[type][MIXER_CHN_LEFT];
+  chn_right = mixer_elem_chn[type][MIXER_CHN_RIGHT];
+  if (chn_right != SND_MIXER_SCHN_UNKNOWN) {
+    if (type != MIXER_ELEM_CAPTURE) {
+      if (!snd_mixer_selem_has_playback_channel(elem, chn_right))
+	chn_right = SND_MIXER_SCHN_UNKNOWN;
+    } else {
+      if (!snd_mixer_selem_has_capture_channel(elem, chn_right))
+	chn_right = SND_MIXER_SCHN_UNKNOWN;
+    }
+  }
+
+  /* volume
+   */
+  if ((mixer_volume_delta[MIXER_CHN_LEFT] ||
+       mixer_volume_delta[MIXER_CHN_RIGHT] ||
+       mixer_balance_volumes) &&
+      (mixer_type[elem_index] & MIXER_ELEM_HAS_VOLUME)) {
+    int mono;
+    int joined;
+    mono = (chn_right == SND_MIXER_SCHN_UNKNOWN);
+    if (type != MIXER_ELEM_CAPTURE)
+      joined = snd_mixer_selem_has_playback_volume_joined(elem);
+    else
+	joined = snd_mixer_selem_has_capture_volume_joined(elem);
+    mono |= joined;
+    if (mono && !mixer_volume_delta[MIXER_CHN_LEFT])
+      mixer_volume_delta[MIXER_CHN_LEFT] = mixer_volume_delta[MIXER_CHN_RIGHT];
+    vleft = mixer_calc_volume(elem, mixer_volume_delta[MIXER_CHN_LEFT], type, chn_left);
+    vbalance = vleft;
+    if (! mono) {
+      vright = mixer_calc_volume(elem, mixer_volume_delta[MIXER_CHN_RIGHT], type, chn_right);
+      vbalance += vright;
+      vbalance /= 2;
+    } else
+      vright = vleft;
+    if (vleft >= 0 && vright >= 0) {
+      if (joined) {
+	for (chn = 0; chn < SND_MIXER_SCHN_LAST; chn++)
+	  if (type != MIXER_ELEM_CAPTURE) {
+	    if (snd_mixer_selem_has_playback_channel(elem, chn))
+	      snd_mixer_selem_set_playback_volume(elem, chn, vleft);
+	  } else {
+	    if (snd_mixer_selem_has_capture_channel(elem, chn))
+	      snd_mixer_selem_set_capture_volume(elem, chn, vleft);
+	  }
+      } else {
+	if (mixer_balance_volumes)
+	  vleft = vright = vbalance;
+	if (type != MIXER_ELEM_CAPTURE) {
+	  if (snd_mixer_selem_has_playback_volume(elem) &&
+	      snd_mixer_selem_has_playback_channel(elem, chn_left))
+	    snd_mixer_selem_set_playback_volume(elem, chn_left, vleft);
+	} else {
+	  if (snd_mixer_selem_has_capture_volume(elem) &&
+	      snd_mixer_selem_has_capture_channel(elem, chn_left))
+	    snd_mixer_selem_set_capture_volume(elem, chn_left, vleft);
+	}
+	if (! mono) {
+	  if (type != MIXER_ELEM_CAPTURE) {
+	    if (snd_mixer_selem_has_playback_volume(elem) &&
+		snd_mixer_selem_has_playback_channel(elem, chn_right))
+	      snd_mixer_selem_set_playback_volume(elem, chn_right, vright);
+	  } else {
+	    if (snd_mixer_selem_has_capture_volume(elem) &&
+		snd_mixer_selem_has_capture_channel(elem, chn_right))
+	      snd_mixer_selem_set_capture_volume(elem, chn_right, vright);
+	  }
+	}
+      }
+    }
+  }
+
+  /* mute
+   */
+  if (mixer_type[elem_index] & MIXER_ELEM_MUTE_SWITCH) {
+    if (mixer_toggle_mute && snd_mixer_selem_has_playback_switch(elem)) {
+      if (snd_mixer_selem_has_playback_switch_joined(elem)) {
+	snd_mixer_selem_get_playback_switch(elem, chn_left, &sw);
+	snd_mixer_selem_set_playback_switch_all(elem, !sw);
+      } else {
+	if (mixer_toggle_mute & MIXER_MASK_LEFT) {
+	  snd_mixer_selem_get_playback_switch(elem, chn_left, &sw);
+	  snd_mixer_selem_set_playback_switch(elem, chn_left, !sw);
+	}
+	if (chn_right != SND_MIXER_SCHN_UNKNOWN && 
+	    (mixer_toggle_mute & MIXER_MASK_RIGHT)) {
+	  snd_mixer_selem_get_playback_switch(elem, chn_right, &sw);
+	  snd_mixer_selem_set_playback_switch(elem, chn_right, !sw);
+	}
+      }
+    }
+  }
+  mixer_toggle_mute = 0;
+
+  /* capture
+   */
+  if (mixer_type[elem_index] & MIXER_ELEM_CAPTURE_SWITCH) {
+    if (mixer_toggle_capture && snd_mixer_selem_has_capture_switch(elem)) {
+      if (snd_mixer_selem_has_capture_switch_joined(elem)) {
+	snd_mixer_selem_get_capture_switch(elem, chn_left, &sw);
+	snd_mixer_selem_set_capture_switch_all(elem, !sw);
+      } else {
+	if ((mixer_toggle_capture & MIXER_MASK_LEFT) &&
+	    snd_mixer_selem_has_capture_channel(elem, chn_left)) {
+	  snd_mixer_selem_get_capture_switch(elem, chn_left, &sw);
+	  snd_mixer_selem_set_capture_switch(elem, chn_left, !sw);
+	}
+	if (chn_right != SND_MIXER_SCHN_UNKNOWN && 
+	    snd_mixer_selem_has_capture_channel(elem, chn_right) &&
+	    (mixer_toggle_capture & MIXER_MASK_RIGHT)) {
+	  snd_mixer_selem_get_capture_switch(elem, chn_right, &sw);
+	  snd_mixer_selem_set_capture_switch(elem, chn_right, !sw);
+	}
+      }
+    }
+  }
+  mixer_toggle_capture = 0;
+
+  /* enum list
+   */
+  if (type == MIXER_ELEM_ENUM) {
+    if (mixer_volume_delta[MIXER_CHN_LEFT])
+      update_enum_list(elem, MIXER_CHN_LEFT, mixer_volume_delta[MIXER_CHN_LEFT]);
+    if (mixer_volume_delta[MIXER_CHN_RIGHT])
+      update_enum_list(elem, MIXER_CHN_RIGHT, mixer_volume_delta[MIXER_CHN_RIGHT]);
+  }
+
+  mixer_volume_delta[MIXER_CHN_LEFT] = mixer_volume_delta[MIXER_CHN_RIGHT] = 0;
+  mixer_balance_volumes = 0;
+}
+
+
+static void display_enum_list(snd_mixer_elem_t *elem, int y, int x)
+{
+  int i, cury, ch, err;
+
+  /* clear */
+  mixer_dc(DC_TEXT);
+  for (i = mixer_cbar_height + 3, cury = y; i > 0; i--, cury--)
+    mvaddstr(cury, x, "       ");
+  
+  cury = y - 4;
+  for (ch = 0; ch < 2; ch++) {
+    int eidx, ofs;
+    char tmp[9];
+    err = snd_mixer_selem_get_enum_item(elem, ch, &eidx);
+    if (err < 0)
+      break;
+    if (snd_mixer_selem_get_enum_item_name(elem, eidx, sizeof(tmp) - 1, tmp) < 0)
+      break;
+    tmp[8] = 0;
+    ofs = (8 - strlen(tmp)) / 2;
+    mvaddstr(cury, x + ofs, tmp);
+    cury += 2;
+  }
+}
+
+static void
+mixer_update_cbar (int elem_index)
+{
+  char string[128], string1[64], *suffix;
+  int dc;
+  snd_mixer_elem_t *elem;
+  long vleft, vright;
+  int type;
+  snd_mixer_selem_id_t *sid;
+  snd_mixer_selem_channel_id_t chn_left, chn_right;
+  int x, y, i;
+  int swl, swr;
+
+  /* set new scontrol indices and read info
+   */
+  if (mixer_sid == NULL)
+    return;
+
+  sid = (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * mixer_grpidx[elem_index]);
+  elem = snd_mixer_find_selem(mixer_handle, sid);
+  if (elem == NULL)
+    CHECK_ABORT (ERR_FCN, "snd_mixer_find_selem()", -EINVAL);
+
+  type = mixer_type[elem_index] & MIXER_ELEM_TYPE_MASK;
+  chn_left = mixer_elem_chn[type][MIXER_CHN_LEFT];
+  chn_right = mixer_elem_chn[type][MIXER_CHN_RIGHT];
+  if (chn_right != SND_MIXER_SCHN_UNKNOWN) {
+    if (type != MIXER_ELEM_CAPTURE) {
+      if (!snd_mixer_selem_has_playback_channel(elem, chn_right))
+	chn_right = SND_MIXER_SCHN_UNKNOWN;
+    } else {
+      if (!snd_mixer_selem_has_capture_channel(elem, chn_right))
+	chn_right = SND_MIXER_SCHN_UNKNOWN;
+    }
+  }
+
+  vleft = vright = 0;
+  if (type != MIXER_ELEM_CAPTURE && snd_mixer_selem_has_playback_volume(elem)) {
+    long vmin, vmax;
+    snd_mixer_selem_get_playback_volume_range(elem, &vmin, &vmax);
+    snd_mixer_selem_get_playback_volume(elem, chn_left, &vleft);
+    vleft = mixer_conv(vleft, vmin, vmax, 0, 100);
+    if (chn_right != SND_MIXER_SCHN_UNKNOWN) {
+      snd_mixer_selem_get_playback_volume(elem, chn_right, &vright);
+      vright = mixer_conv(vright, vmin, vmax, 0, 100);
+    } else {
+      vright = vleft;
+    }
+  }
+  
+  if (type == MIXER_ELEM_CAPTURE && snd_mixer_selem_has_capture_volume(elem)) {
+    long vmin, vmax;
+    snd_mixer_selem_get_capture_volume_range(elem, &vmin, &vmax);
+    snd_mixer_selem_get_capture_volume(elem, chn_left, &vleft);
+    vleft = mixer_conv(vleft, vmin, vmax, 0, 100);
+    if (chn_right != SND_MIXER_SCHN_UNKNOWN) {
+      snd_mixer_selem_get_capture_volume(elem, chn_right, &vright);
+      vright = mixer_conv(vright, vmin, vmax, 0, 100);
+    } else {
+      vright = vleft;
+    }
+  }
+  
+  /* update the focused full bar name
+   */
+  if (elem_index == mixer_focus_elem) {
+    mixer_dc (DC_PROMPT);
+    mvaddstr (3, 2, "Item: ");
+    mixer_dc (DC_TEXT);
+    string1[8] = 0;
+    for (i = 0; i < 63; i++)
+      string1[i] = ' ';
+    string1[63] = '\0';
+    strcpy(string, snd_mixer_selem_id_get_name(sid));
+    if (mixer_type[elem_index] & MIXER_ELEM_CAPTURE_SUFFIX)
+      strcat(string, " Capture");
+    if (snd_mixer_selem_id_get_index(sid) > 0)
+      sprintf(string + strlen(string), " %i", snd_mixer_selem_id_get_index(sid));
+    string[63] = '\0';
+    strncpy(string1, string, strlen(string));
+    addstr(string1);
+  }
+
+  /* get channel bar position
+   */
+  if (!mixer_cbar_get_pos (elem_index, &x, &y))
+    return;
+
+  /* channel bar name
+   */
+  mixer_dc (elem_index == mixer_focus_elem ? DC_CBAR_FOCUS_LABEL : DC_CBAR_LABEL);
+  if (mixer_type[elem_index] & MIXER_ELEM_CAPTURE_SUFFIX)
+    suffix = " Capture";
+  else
+    suffix = "";
+  if (snd_mixer_selem_id_get_index(sid) > 0)
+    sprintf(string1, "%s%s %d", snd_mixer_selem_id_get_name(sid), suffix, snd_mixer_selem_id_get_index(sid));
+  else
+    sprintf(string1, "%s%s", snd_mixer_selem_id_get_name(sid), suffix);
+  string1[8] = 0;
+  for (i = 0; i < 8; i++)
+    {
+      string[i] = ' ';
+    }
+  sprintf (string + (8 - strlen (string1)) / 2, "%s          ", string1);
+  string[8] = 0;
+  mvaddstr (y, x, string);
+  y--;
+  
+  /* current channel values
+   */
+  mixer_dc (DC_BACK);
+  mvaddstr (y, x, "         ");
+  if (mixer_type[elem_index] & MIXER_ELEM_HAS_VOLUME) {
+    mixer_dc (DC_TEXT);
+    sprintf (string, "%ld", vleft);
+    mvaddstr (y, x + 3 - strlen (string), string);
+    mixer_dc (DC_CBAR_FRAME);
+    mvaddch (y, x + 3, '<');
+    mvaddch (y, x + 4, '>');
+    mixer_dc (DC_TEXT);
+    sprintf (string, "%ld", vright);
+    mvaddstr (y, x + 5, string);
+  }
+  y--;
+  
+  if (type == MIXER_ELEM_ENUM) {
+    display_enum_list(elem, y, x);
+    return;
+  } 
+
+  /* left/right bar
+   */
+  mixer_dc (DC_CBAR_FRAME);
+  mvaddstr (y, x, "         ");
+  mvaddch (y, x + 2, ACS_LLCORNER);
+  mvaddch (y, x + 3, ACS_HLINE);
+  mvaddch (y, x + 4, ACS_HLINE);
+  mvaddch (y, x + 5, ACS_LRCORNER);
+  y--;
+  for (i = 0; i < mixer_cbar_height; i++)
+    {
+      mvaddstr (y - i, x, "         ");
+      mvaddch (y - i, x + 2, ACS_VLINE);
+      mvaddch (y - i, x + 5, ACS_VLINE);
+    }
+  string[2] = 0;
+  for (i = 0; i < mixer_cbar_height; i++)
+    {
+      if (i + 1 >= 0.8 * mixer_cbar_height)
+	dc = DC_ANY_3;
+      else if (i + 1 >= 0.4 * mixer_cbar_height)
+	dc = DC_ANY_2;
+      else
+	dc = DC_ANY_1;
+      mvaddch (y, x + 3, mixer_dc (vleft > i * 100 / mixer_cbar_height ? dc : DC_CBAR_EMPTY));
+      mvaddch (y, x + 4, mixer_dc (vright > i * 100 / mixer_cbar_height ? dc : DC_CBAR_EMPTY));
+      y--;
+    }
+  
+  /* muted?
+   */
+  mixer_dc (DC_BACK);
+  mvaddstr (y, x, "         ");
+  if ((mixer_type[elem_index] & MIXER_ELEM_MUTE_SWITCH)
+      && snd_mixer_selem_has_playback_switch(elem)) {
+    mixer_dc (DC_CBAR_FRAME);
+    mvaddch (y, x + 2, ACS_ULCORNER);
+    snd_mixer_selem_get_playback_switch(elem, chn_left, &swl);
+    dc = swl ? DC_CBAR_NOMUTE : DC_CBAR_MUTE;
+    mvaddch (y, x + 3, mixer_dc (dc));
+    if (chn_right != SND_MIXER_SCHN_UNKNOWN) {
+      snd_mixer_selem_get_playback_switch(elem, chn_right, &swr);
+      dc = swr ? DC_CBAR_NOMUTE : DC_CBAR_MUTE;
+    }
+    mvaddch (y, x + 4, mixer_dc (dc));
+    mixer_dc (DC_CBAR_FRAME);
+    mvaddch (y, x + 5, ACS_URCORNER);
+  } else {
+    mixer_dc (DC_CBAR_FRAME);
+    mvaddch (y, x + 2, ACS_ULCORNER);
+    mvaddch (y, x + 3, ACS_HLINE);
+    mvaddch (y, x + 4, ACS_HLINE);
+    mvaddch (y, x + 5, ACS_URCORNER);
+  }    
+  y--;
+  
+  /* capture input?
+   */
+  if ((mixer_type[elem_index] & MIXER_ELEM_CAPTURE_SWITCH) &&
+      snd_mixer_selem_has_capture_switch(elem)) {
+    int has_r_sw = chn_right != SND_MIXER_SCHN_UNKNOWN &&
+      snd_mixer_selem_has_capture_channel(elem, chn_right);
+    snd_mixer_selem_get_capture_switch(elem, chn_left, &swl);
+    if (has_r_sw)
+      snd_mixer_selem_get_capture_switch(elem, chn_right, &swr);
+    if (swl || (has_r_sw && swr)) {
+      mixer_dc (DC_CBAR_CAPTURE);
+      mvaddstr (y, x + 1, "CAPTUR");
+      if (swl) {
+	mvaddstr (y + 1, x + 1, "L");
+	if (! has_r_sw)
+	  mvaddstr (y + 1, x + 6, "R");
+      }
+      if (has_r_sw && swr)
+	mvaddstr (y + 1, x + 6, "R");
+    } else {
+      for (i = 0; i < 6; i++)
+	mvaddch (y, x + 1 + i, mixer_dc (DC_CBAR_NOCAPTURE));
+    }
+  } else {
+    mixer_dc (DC_BACK);
+    mvaddstr (y, x, "         ");
+  }
+  y--;
+}
+
+static void
+mixer_update_cbars (void)
+{
+  static int o_x = 0;
+  static int o_y = 0;
+  int i, x, y;
+  
+  
+  if (!mixer_cbar_get_pos (mixer_focus_elem, &x, &y))
+    {
+      if (mixer_focus_elem < mixer_first_vis_elem)
+	mixer_first_vis_elem = mixer_focus_elem;
+      else if (mixer_focus_elem >= mixer_first_vis_elem + mixer_n_vis_elems)
+	mixer_first_vis_elem = mixer_focus_elem - mixer_n_vis_elems + 1;
+      mixer_cbar_get_pos (mixer_focus_elem, &x, &y);
+    }
+  if (mixer_first_vis_elem + mixer_n_vis_elems >= mixer_n_elems) {
+     mixer_first_vis_elem = mixer_n_elems - mixer_n_vis_elems;
+     if (mixer_first_vis_elem < 0)
+       mixer_first_vis_elem = 0;
+     mixer_cbar_get_pos (mixer_focus_elem, &x, &y);
+  }
+  mixer_write_cbar(mixer_focus_elem);
+  for (i = 0; i < mixer_n_vis_elems; i++) {
+    if (i + mixer_first_vis_elem >= mixer_n_elems)
+      continue;
+    mixer_update_cbar (i + mixer_first_vis_elem);
+  }
+  
+  /* draw focused cbar
+   */
+  if (mixer_have_old_focus)
+    {
+      mixer_dc (DC_BACK);
+      mvaddstr (o_y, o_x, " ");
+      mvaddstr (o_y, o_x + 9, " ");
+    }
+  o_x = x - 1;
+  o_y = y;
+  mixer_dc (DC_FOCUS);
+  mvaddstr (o_y, o_x, "<");
+  mvaddstr (o_y, o_x + 9, ">");
+  mixer_have_old_focus = 1;
+}
+
+static void
+mixer_draw_frame (void)
+{
+  char string[128];
+  int i;
+  int max_len;
+  
+  mixer_dc (DC_FRAME);
+  
+  /* card name
+   */
+  mixer_dc (DC_PROMPT);
+  mvaddstr (1, 2, "Card: ");
+  mixer_dc (DC_TEXT);
+  sprintf (string, "%s", mixer_card_name);
+  max_len = mixer_max_x - 2 - 6 - 2;
+  if ((int)strlen (string) > max_len)
+    string[max_len] = 0;
+  addstr (string);
+  
+  /* device name
+   */
+  mixer_dc (DC_PROMPT);
+  mvaddstr (2, 2, "Chip: ");
+  mixer_dc (DC_TEXT);
+  sprintf (string, "%s", mixer_device_name);
+  max_len = mixer_max_x - 2 - 6 - 2;
+  if ((int)strlen (string) > max_len)
+    string[max_len] = 0;
+  addstr (string);
+
+  /* lines
+   */
+  mixer_dc (DC_PROMPT);
+  for (i = 1; i < mixer_max_y - 1; i++)
+    {
+      mvaddch (i, 0, ACS_VLINE);
+      mvaddch (i, mixer_max_x - 1, ACS_VLINE);
+    }
+  for (i = 1; i < mixer_max_x - 1; i++)
+    {
+      mvaddch (0, i, ACS_HLINE);
+      mvaddch (mixer_max_y - 1, i, ACS_HLINE);
+    }
+  
+  /* corners
+   */
+  mixer_dc (DC_PROMPT);
+  mvaddch (0, 0, ACS_ULCORNER);
+  mvaddch (0, mixer_max_x - 1, ACS_URCORNER);
+  mvaddch (mixer_max_y - 1, 0, ACS_LLCORNER);
+  if (!mixer_no_lrcorner)
+    mvaddch (mixer_max_y - 1, mixer_max_x - 1, ACS_LRCORNER);
+  else
+    {
+      mvaddch (mixer_max_y - 2, mixer_max_x - 1, ACS_LRCORNER);
+      mvaddch (mixer_max_y - 2, mixer_max_x - 2, ACS_ULCORNER);
+      mvaddch (mixer_max_y - 1, mixer_max_x - 2, ACS_LRCORNER);
+    }
+
+  /* program title
+   */
+  sprintf (string, "%s %s (Press Escape to quit)", PRGNAME_UPPER, VERSION);
+  max_len = strlen (string);
+  if (mixer_max_x >= max_len + 4)
+    {
+      mixer_dc (DC_PROMPT);
+      mvaddch (0, mixer_max_x / 2 - max_len / 2 - 1, '[');
+      mvaddch (0, mixer_max_x / 2 - max_len / 2 + max_len, ']');
+    }
+  if (mixer_max_x >= max_len + 2)
+    {
+      mixer_dc (DC_TEXT);
+      mvaddstr (0, mixer_max_x / 2 - max_len / 2, string);
+    }
+}
+
+static char*
+mixer_offset_text (char **t,
+		   int	  col,
+		   int	 *length)
+{
+  char *p = *t;
+  char *r;
+
+  while (*p && *p != '\n' && col--)
+    p++;
+  if (*p == '\n' || !*p)
+    {
+      if (*p == '\n')
+	p++;
+      *length = 0;
+      *t = p;
+      return p;
+    }
+
+  r = p;
+  while (*r && *r != '\n' && (*length)--)
+    r++;
+
+  *length = r - p;
+  while (*r && *r != '\n')
+    r++;
+  if (*r == '\n')
+    r++;
+  *t = r;
+
+  return p;
+}
+
+static void
+mixer_show_text (char *title,
+		 char *text,
+		 int  *xoffs,
+		 int  *yoffs)
+{
+  int tlines = 0, tcols = 0;
+  float hscroll, vscroll;
+  float hoffs, voffs;
+  char *p, *text_offs = text;
+  int x1, x2, y1, y2;
+  int i, n, l, r;
+  unsigned long block, stipple;
+
+  /* coords
+   */
+  x1 = 2;
+  x2 = mixer_max_x - 3;
+  y1 = 4;
+  y2 = mixer_max_y - 2;
+
+  if ((y2 - y1) < 3 || (x2 - x1) < 3)
+    return;
+
+  /* text dimensions
+   */
+  l = 0;
+  for (p = text; *p; p++)
+    if (*p == '\n')
+      {
+	tlines++;
+	tcols = MAX (l, tcols);
+	l = 0;
+      }
+    else
+      l++;
+  tcols = MAX (l, tcols);
+  if (p > text && *(p - 1) != '\n')
+    tlines++;
+
+  /* scroll areas / offsets
+   */
+  l = x2 - x1 - 2;
+  if (l > tcols)
+    {
+      x1 += (l - tcols) / 2;
+      x2 = x1 + tcols + 1;
+    }
+  if (mixer_hscroll_delta)
+    {
+      *xoffs += mixer_hscroll_delta;
+      mixer_hscroll_delta = 0;
+      if (*xoffs < 0)
+	{
+	  *xoffs = 0;
+	  beep ();
+	}
+      else if (*xoffs > tcols - l - 1)
+	{
+	  *xoffs = MAX (0, tcols - l - 1);
+	  beep ();
+	}
+    }
+  if (tcols - l - 1 <= 0)
+    {
+      hscroll = 1;
+      hoffs = 0;
+    }
+  else
+    {
+      hscroll = ((float) l) / tcols;
+      hoffs = ((float) *xoffs) / (tcols - l - 1);
+    }
+
+  l = y2 - y1 - 2;
+  if (l > tlines)
+    {
+      y1 += (l - tlines) / 2;
+      y2 = y1 + tlines + 1;
+    }
+  if (mixer_vscroll_delta)
+    {
+      *yoffs += mixer_vscroll_delta;
+      mixer_vscroll_delta = 0;
+      if (*yoffs < 0)
+	{
+	  *yoffs = 0;
+	  beep ();
+	}
+      else if (*yoffs > tlines - l - 1)
+	{
+	  *yoffs = MAX (0, tlines - l - 1);
+	  beep ();
+	}
+    }
+  if (tlines - l - 1 <= 0)
+    {
+      voffs = 0;
+      vscroll = 1;
+    }
+  else
+    {
+      vscroll = ((float) l) / tlines;
+      voffs = ((float) *yoffs) / (tlines - l - 1);
+    }
+
+  /* colors
+   */
+  mixer_dc (DC_ANY_4);
+
+  /* corners
+   */
+  mvaddch (y2, x2, ACS_LRCORNER);
+  mvaddch (y2, x1, ACS_LLCORNER);
+  mvaddch (y1, x1, ACS_ULCORNER);
+  mvaddch (y1, x2, ACS_URCORNER);
+
+  /* left + upper border
+   */
+  for (i = y1 + 1; i < y2; i++)
+    mvaddch (i, x1, ACS_VLINE);
+  for (i = x1 + 1; i < x2; i++)
+    mvaddch (y1, i, ACS_HLINE);
+  if (title)
+    {
+      l = strlen (title);
+      if (l <= x2 - x1 - 3)
+	{
+	  mvaddch (y1, x1 + 1 + (x2 - x1 - l) / 2 - 1, '[');
+	  mvaddch (y1, x1 + 1 + (x2 - x1 - l) / 2 + l, ']');
+	}
+      if (l <= x2 - x1 - 1)
+	{
+	  mixer_dc (DC_ANY_3);
+	  mvaddstr (y1, x1 + 1 + (x2 - x1 - l) / 2, title);
+	}
+      mixer_dc (DC_ANY_4);
+    }
+
+  stipple = ACS_CKBOARD;
+  block = ACS_BLOCK;
+  if (block == '#' && ACS_BOARD == '#')
+    {
+      block = stipple;
+      stipple = ACS_BLOCK;
+    }
+
+  /* lower scroll border
+   */
+  l = x2 - x1 - 1;
+  n = hscroll * l;
+  r = (hoffs + 1.0 / (2 * (l - n - 1))) * (l - n - 1);
+  for (i = 0; i < l; i++)
+    mvaddch (y2, i + x1 + 1, hscroll >= 1 ? ACS_HLINE :
+	     i >= r && i <= r + n ? block : stipple);
+
+  /* right scroll border
+   */
+  l = y2 - y1 - 1;
+  n = vscroll * l;
+  r = (voffs + 1.0 / (2 * (l - n - 1))) * (l - n - 1);
+  for (i = 0; i < l; i++)
+    mvaddch (i + y1 + 1, x2, vscroll >= 1 ? ACS_VLINE :
+	     i >= r && i <= r + n ? block : stipple);
+
+  /* show text
+   */
+  x1++; y1++;
+  for (i = 0; i < *yoffs; i++)
+    {
+      l = 0;
+      mixer_offset_text (&text_offs, 0, &l);
+    }
+  for (i = y1; i < y2; i++)
+    {
+      l = x2 - x1;
+      p = mixer_offset_text (&text_offs, *xoffs, &l);
+      n = x1;
+      while (l--)
+	mvaddch (i, n++, *p++);
+      while (n < x2)
+	mvaddch (i, n++, ' ');
+    }
+}
+
+struct vbuffer
+{
+  char *buffer;
+  int size;
+  int len;
+};
+
+static void
+vbuffer_kill (struct vbuffer *vbuf)
+{
+  if (vbuf->size)
+    free (vbuf->buffer);
+  vbuf->buffer = NULL;
+  vbuf->size = 0;
+  vbuf->len = 0;
+}
+
+#define vbuffer_append_string(vb,str)	vbuffer_append (vb, str, strlen (str))
+static void
+vbuffer_append (struct vbuffer *vbuf,
+		char           *text,
+		int             len)
+{
+  if (vbuf->size - vbuf->len <= len)
+    {
+      vbuf->size += len + 1;
+      vbuf->buffer = realloc (vbuf->buffer, vbuf->size);
+    }
+  memcpy (vbuf->buffer + vbuf->len, text, len);
+  vbuf->len += len;
+  vbuf->buffer[vbuf->len] = 0;
+}
+
+static int
+vbuffer_append_file (struct vbuffer *vbuf,
+		     char	    *name)
+{
+  int fd;
+
+  fd = open (name, O_RDONLY);
+  if (fd >= 0)
+    {
+      char buffer[1025];
+      int l;
+
+      do
+	{
+	  l = read (fd, buffer, 1024);
+	  
+	  vbuffer_append (vbuf, buffer, MAX (0, l));
+	}
+      while (l > 0 || (l < 0 && (errno == EAGAIN || errno == EINTR)));
+
+      close (fd);
+
+      return 0;
+    }
+  else
+    return 1;
+}
+
+static void
+mixer_show_procinfo (void)
+{
+  struct vbuffer vbuf = { NULL, 0, 0 };
+
+  vbuffer_append_string (&vbuf, "\n");
+  vbuffer_append_string (&vbuf, "/proc/asound/version:\n");
+  vbuffer_append_string (&vbuf, "====================\n");
+  if (vbuffer_append_file (&vbuf, "/proc/asound/version"))
+    {
+      vbuffer_kill (&vbuf);
+      mixer_procinfo_xoffs = mixer_procinfo_yoffs = 0;
+      mixer_show_text ("/proc",
+		       " No /proc information available. ",
+		       &mixer_procinfo_xoffs, &mixer_procinfo_yoffs);
+      return;
+    }
+  else
+    vbuffer_append_file (&vbuf, "/proc/asound/meminfo");
+
+  vbuffer_append_string (&vbuf, "\n");
+  vbuffer_append_string (&vbuf, "/proc/asound/cards:\n");
+  vbuffer_append_string (&vbuf, "===================\n");
+  if (vbuffer_append_file (&vbuf, "/proc/asound/cards"))
+    vbuffer_append_string (&vbuf, "No information available.\n");
+
+  vbuffer_append_string (&vbuf, "\n");
+  vbuffer_append_string (&vbuf, "/proc/asound/devices:\n");
+  vbuffer_append_string (&vbuf, "=====================\n");
+  if (vbuffer_append_file (&vbuf, "/proc/asound/devices"))
+    vbuffer_append_string (&vbuf, "No information available.\n");
+
+  vbuffer_append_string (&vbuf, "\n");
+  vbuffer_append_string (&vbuf, "/proc/asound/oss-devices:\n");
+  vbuffer_append_string (&vbuf, "=========================\n");
+  if (vbuffer_append_file (&vbuf, "/proc/asound/oss-devices"))
+    vbuffer_append_string (&vbuf, "No information available.\n");
+
+  vbuffer_append_string (&vbuf, "\n");
+  vbuffer_append_string (&vbuf, "/proc/asound/timers:\n");
+  vbuffer_append_string (&vbuf, "====================\n");
+  if (vbuffer_append_file (&vbuf, "/proc/asound/timers"))
+    vbuffer_append_string (&vbuf, "No information available.\n");
+
+  vbuffer_append_string (&vbuf, "\n");
+  vbuffer_append_string (&vbuf, "/proc/asound/pcm:\n");
+  vbuffer_append_string (&vbuf, "=================\n");
+  if (vbuffer_append_file (&vbuf, "/proc/asound/pcm"))
+    vbuffer_append_string (&vbuf, "No information available.\n");
+
+  mixer_show_text ("/proc", vbuf.buffer,
+		   &mixer_procinfo_xoffs, &mixer_procinfo_yoffs);
+  vbuffer_kill (&vbuf);
+}
+
+static int
+mixer_event (snd_mixer_t *mixer, unsigned int mask, snd_mixer_elem_t *elem)
+{
+  mixer_changed_state = 1;
+  return 0;
+}
+
+static void
+mixer_init (void)
+{
+  snd_ctl_card_info_t *hw_info;
+  snd_ctl_t *ctl_handle;
+  int err;
+  snd_ctl_card_info_alloca(&hw_info);
+  
+  if ((err = snd_ctl_open (&ctl_handle, card_id, 0)) < 0)
+    mixer_abort (ERR_OPEN, "snd_ctl_open", err);
+  if ((err = snd_ctl_card_info (ctl_handle, hw_info)) < 0)
+    mixer_abort (ERR_FCN, "snd_ctl_card_info", err);
+  snd_ctl_close (ctl_handle);
+  /* open mixer device
+   */
+  if ((err = snd_mixer_open (&mixer_handle, 0)) < 0)
+    mixer_abort (ERR_FCN, "snd_mixer_open", err);
+  if ((err = snd_mixer_attach (mixer_handle, card_id)) < 0)
+    mixer_abort (ERR_FCN, "snd_mixer_attach", err);
+  if ((err = snd_mixer_selem_register (mixer_handle, NULL, NULL)) < 0)
+    mixer_abort (ERR_FCN, "snd_mixer_selem_register", err);
+  snd_mixer_set_callback (mixer_handle, mixer_event);
+  if ((err = snd_mixer_load (mixer_handle)) < 0)
+    mixer_abort (ERR_FCN, "snd_mixer_load", err);
+  
+  /* setup global variables
+   */
+  strcpy(mixer_card_name, snd_ctl_card_info_get_name(hw_info));
+  strcpy(mixer_device_name, snd_ctl_card_info_get_mixername(hw_info));
+}
+
+static void
+mixer_reinit (void)
+{
+  snd_mixer_elem_t *elem;
+  int idx, elem_index, i, j, selem_count;
+  snd_mixer_selem_id_t *sid;
+  snd_mixer_selem_id_t *focus_gid;
+  int focus_type = -1;
+  snd_mixer_selem_id_alloca(&focus_gid);
+  
+  if (!mixer_changed_state)
+    return;
+  if (mixer_sid) {
+    snd_mixer_selem_id_copy(focus_gid, (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * mixer_grpidx[mixer_focus_elem]));
+    focus_type = mixer_type[mixer_focus_elem] & MIXER_ELEM_TYPE_MASK;
+  }
+__again:
+  mixer_changed_state = 0;
+  if (mixer_sid != NULL)
+    free(mixer_sid);
+  selem_count = snd_mixer_get_count(mixer_handle);
+  mixer_sid = malloc(snd_mixer_selem_id_sizeof() * selem_count);
+  if (mixer_sid == NULL)
+    mixer_abort (ERR_FCN, "malloc", 0);
+  
+  mixer_n_selems = 0;
+  for (elem = snd_mixer_first_elem(mixer_handle); elem; elem = snd_mixer_elem_next(elem)) {
+    sid = (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * mixer_n_selems);
+    if (mixer_changed_state)
+      goto __again;
+    if (!snd_mixer_selem_is_active(elem))
+      continue;
+    snd_mixer_selem_get_id(elem, sid);
+    mixer_n_selems++;
+  }
+
+  mixer_n_elems = 0;
+  for (idx = 0; idx < mixer_n_selems; idx++) {
+    int nelems_added = 0;
+    sid = (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * idx);
+    if (mixer_changed_state)
+      goto __again;
+    elem = snd_mixer_find_selem(mixer_handle, sid);
+    if (elem == NULL)
+      CHECK_ABORT (ERR_FCN, "snd_mixer_find_selem()", -EINVAL);
+    for (i = 0; i < MIXER_ELEM_CAPTURE; i++) {
+      int ok;
+      for (j = ok = 0; j < 2; j++) {
+	if (mixer_changed_state)
+	  goto __again;
+	if (snd_mixer_selem_has_playback_channel(elem, mixer_elem_chn[i][j]))
+	  ok++;
+      }
+      if (ok) {
+	nelems_added++;
+	mixer_n_elems++;
+      }
+    }
+    if (snd_mixer_selem_has_capture_volume(elem) ||
+	(nelems_added == 0 && snd_mixer_selem_has_capture_switch(elem)))
+      mixer_n_elems++;
+  }
+
+  if (mixer_type)
+    free(mixer_type);
+  mixer_type = (int *)malloc(sizeof(int) * mixer_n_elems);
+  if (mixer_type == NULL)
+    mixer_abort(ERR_FCN, "malloc", 0);
+  if (mixer_grpidx)
+    free(mixer_grpidx);
+  mixer_grpidx = (int *)malloc(sizeof(int) * mixer_n_elems);
+  if (mixer_grpidx == NULL)
+    mixer_abort(ERR_FCN, "malloc", 0);
+  elem_index = 0;
+  for (idx = 0; idx < mixer_n_selems; idx++) {
+    int nelems_added = 0;
+    sid = (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * idx);
+    if (mixer_changed_state)
+      goto __again;
+    elem = snd_mixer_find_selem(mixer_handle, sid);
+    if (elem == NULL)
+      CHECK_ABORT (ERR_FCN, "snd_mixer_find_selem()", -EINVAL);
+    for (i = 0; i < MIXER_ELEM_CAPTURE; i++) {
+      int ok;
+      for (j = ok = 0; j < 2; j++) {
+	if (mixer_changed_state)
+	  goto __again;
+	if (snd_mixer_selem_has_playback_channel(elem, mixer_elem_chn[i][j]))
+	  ok++;
+      }
+      if (ok) {
+	sid = (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * idx);
+	mixer_grpidx[elem_index] = idx;
+	if (snd_mixer_selem_is_enumerated(elem)) {
+	  mixer_type[elem_index] = MIXER_ELEM_ENUM;
+	} else {
+	  mixer_type[elem_index] = i;
+	  if (i == 0 && snd_mixer_selem_has_playback_switch(elem))
+	    mixer_type[elem_index] |= MIXER_ELEM_MUTE_SWITCH;
+	  if (snd_mixer_selem_has_playback_volume(elem))
+	    mixer_type[elem_index] |= MIXER_ELEM_HAS_VOLUME;
+	  if (i == 0 && snd_mixer_selem_has_capture_switch(elem))
+	    mixer_type[elem_index] |= MIXER_ELEM_CAPTURE_SWITCH;
+	}
+	elem_index++;
+	nelems_added++;
+	if (elem_index >= mixer_n_elems)
+	  break;
+      }
+    }
+    if (snd_mixer_selem_has_capture_volume(elem) ||
+	(nelems_added == 0 && snd_mixer_selem_has_capture_switch(elem))) {
+      mixer_grpidx[elem_index] = idx;
+      mixer_type[elem_index] = MIXER_ELEM_CAPTURE;
+      if (nelems_added == 0 && snd_mixer_selem_has_capture_switch(elem))
+	mixer_type[elem_index] |= MIXER_ELEM_CAPTURE_SWITCH;
+      if (nelems_added)
+	mixer_type[elem_index] |= MIXER_ELEM_CAPTURE_SUFFIX;
+      if (snd_mixer_selem_has_capture_volume(elem))
+	mixer_type[elem_index] |= MIXER_ELEM_HAS_VOLUME;
+      elem_index++;
+      if (elem_index >= mixer_n_elems)
+	break;
+    }
+  }
+
+  mixer_focus_elem = 0;
+  if (focus_type >= 0) {
+    for (elem_index = 0; elem_index < mixer_n_elems; elem_index++) {
+      sid = (snd_mixer_selem_id_t *)(((char *)mixer_sid) + snd_mixer_selem_id_sizeof() * mixer_grpidx[elem_index]);
+      if (!strcmp(snd_mixer_selem_id_get_name(focus_gid),
+                  snd_mixer_selem_id_get_name(sid)) &&
+          snd_mixer_selem_id_get_index(focus_gid) ==
+          snd_mixer_selem_id_get_index(sid) &&
+	  (mixer_type[elem_index] & MIXER_ELEM_TYPE_MASK) == focus_type) {
+        mixer_focus_elem = elem_index;
+        break;
+      }
+    }
+  }
+
+  if (mixer_changed_state)
+    goto __again;
+}
+
+static void
+mixer_init_window (void)
+{
+  /* initialize ncurses
+   */
+  mixer_window = initscr ();
+  curs_set (0); /* hide the cursor */
+
+  mixer_no_lrcorner = tigetflag ("xenl") != 1 && tigetflag ("am") != 1;
+
+  if (mixer_do_color)
+    mixer_do_color = has_colors ();
+  mixer_init_draw_contexts ();
+
+  /* react on key presses
+   */
+  cbreak ();
+  noecho ();
+  leaveok (mixer_window, TRUE);
+  keypad (mixer_window, TRUE);
+  GETCH_BLOCK (1);
+
+  /* init mixer screen
+   */
+  getmaxyx (mixer_window, mixer_max_y, mixer_max_x);
+  if (mixer_minimize)
+    {
+      mixer_max_x = MIXER_MIN_X;
+      mixer_max_y = MIXER_MIN_Y;
+    }
+  mixer_ofs_x = 2 /* extra begin padding: */ + 1;
+
+  /* required allocations */
+  mixer_n_vis_elems = (mixer_max_x - mixer_ofs_x * 2 + 1) / 9;
+  mixer_n_vis_elems = CLAMP (mixer_n_vis_elems, 1, mixer_n_elems);
+  mixer_extra_space = mixer_max_x - mixer_ofs_x * 2 + 1 - mixer_n_vis_elems * 9;
+  mixer_extra_space = MAX (0, mixer_extra_space / (mixer_n_vis_elems + 1));
+  if (MIXER_TEXT_Y + 10 < mixer_max_y)
+    mixer_cbar_height = 10 + MAX (0, mixer_max_y - MIXER_TEXT_Y - 10 ) / 2;
+  else
+    mixer_cbar_height = MAX (1, mixer_max_y - MIXER_TEXT_Y);
+
+  mixer_clear (TRUE);
+}
+
+static void
+mixer_resize (void)
+{
+  struct winsize winsz = { 0, };
+
+  mixer_needs_resize = 0;
+  
+  if (ioctl (fileno (stdout), TIOCGWINSZ, &winsz) >= 0 &&
+      winsz.ws_row && winsz.ws_col)
+    {
+      keypad (mixer_window, FALSE);
+      leaveok (mixer_window, FALSE);
+
+      endwin ();
+      
+      mixer_max_x = MAX (2, winsz.ws_col);
+      mixer_max_y = MAX (2, winsz.ws_row);
+      
+      /* humpf, i don't get it, if only the number of rows change,
+       * ncurses will segfault shortly after (could trigger that with mc as well).
+       */
+      resizeterm (mixer_max_y + 1, mixer_max_x + 1);
+      resizeterm (mixer_max_y, mixer_max_x);
+      
+      mixer_init_window ();
+      
+      if (mixer_max_x < MIXER_MIN_X ||
+	  mixer_max_y < MIXER_MIN_Y)
+	beep (); // mixer_abort (ERR_WINSIZE, "");
+
+      mixer_have_old_focus = 0;
+    }
+}
+
+static void
+mixer_set_delta(int delta)
+{
+  int grp;
+  
+  for (grp = 0; grp < 2; grp++)
+    mixer_volume_delta[grp] = delta;
+}
+
+static void
+mixer_add_delta(int delta)
+{
+  int grp;
+  
+  for (grp = 0; grp < 2; grp++)
+    mixer_volume_delta[grp] += delta;
+}
+
+static int
+mixer_iteration (void)
+{
+  int count, err;
+  struct pollfd *fds;
+  int finished = 0;
+  int key = 0;
+  int old_view;
+  unsigned short revents;
+  
+  /* setup for select on stdin and the mixer fd */
+  if ((count = snd_mixer_poll_descriptors_count(mixer_handle)) < 0)
+    mixer_abort (ERR_FCN, "snd_mixer_poll_descriptors_count", count);
+  fds = calloc(count + 1, sizeof(struct pollfd));
+  if (fds == NULL)
+    mixer_abort (ERR_FCN, "malloc", 0);
+  fds->fd = fileno(stdin);
+  fds->events = POLLIN;
+  if ((err = snd_mixer_poll_descriptors(mixer_handle, fds + 1, count)) < 0)
+    mixer_abort (ERR_FCN, "snd_mixer_poll_descriptors", err);
+  if (err != count)
+    mixer_abort (ERR_FCN, "snd_mixer_poll_descriptors (err != count)", 0);
+  
+  finished = poll(fds, count + 1, -1);
+
+  /* don't abort on handled signals */
+  if (finished < 0 && errno == EINTR)
+    finished = 0;
+  if (mixer_needs_resize)
+    mixer_resize ();
+
+  if (finished > 0) {
+    if (fds->revents & POLLIN) {
+      key = getch ();
+      finished--;
+    }
+  } else {
+    key = 0;
+  }
+  
+  if (finished > 0) {
+    if (snd_mixer_poll_descriptors_revents(mixer_handle, fds + 1, count, &revents) >= 0) {
+      if (revents & POLLNVAL)
+        mixer_abort (ERR_FCN, "snd_mixer_poll_descriptors (POLLNVAL)", 0);
+      if (revents & POLLERR)
+        mixer_abort (ERR_FCN, "snd_mixer_poll_descriptors (POLLERR)", 0);
+      if (revents & POLLIN)
+        snd_mixer_handle_events(mixer_handle);
+    }
+  }
+
+  finished = 0;
+  free(fds);
+
+  old_view = mixer_view;
+  
+#if 0 /* DISABLED: it's not so usefull rather annoying... */
+  /* feature Escape prefixing for some keys */
+  if (key == 27)
+    {
+      GETCH_BLOCK (0);
+      key = getch ();
+      GETCH_BLOCK (1);
+      switch (key)
+	{
+	case 9:	/* Tab */
+	  key = KEY_BTAB;
+	  break;
+	default:
+	  key = 27;
+	  break;
+	}
+    }
+#endif /* DISABLED */
+  
+  /* general keys */
+  switch (key)
+    {
+    case 0:
+      /* ignore */
+      break;
+    case 27:	/* Escape */
+      finished = 1;
+      key = 0;
+      break;
+    case 13:	/* Return */
+    case 10:	/* NewLine */
+      if (mixer_view == VIEW_CHANNELS)
+	mixer_clear (FALSE);
+      mixer_view = VIEW_CHANNELS;
+      key = 0;
+      break;
+    case 'h':
+    case 'H':
+    case KEY_F (1):
+      mixer_view = VIEW_HELP;
+      key = 0;
+      break;
+    case '/':
+    case KEY_F (2):
+      mixer_view = VIEW_PROCINFO;
+      key = 0;
+      break;
+    case '\014':
+    case 'L':
+    case 'l':
+      mixer_clear (TRUE);
+      break;
+    }
+  
+  if (key && (mixer_view == VIEW_HELP ||
+	      mixer_view == VIEW_PROCINFO))
+    switch (key)
+      {
+      case 9:		/* Tab */
+	mixer_hscroll_delta += 8;
+	break;
+      case KEY_BTAB:
+	mixer_hscroll_delta -= 8;
+	break;
+      case KEY_A1:
+	mixer_hscroll_delta -= 1;
+	mixer_vscroll_delta -= 1;
+	break;
+      case KEY_A3:
+	mixer_hscroll_delta += 1;
+	mixer_vscroll_delta -= 1;
+	break;
+      case KEY_C1:
+	mixer_hscroll_delta -= 1;
+	mixer_vscroll_delta += 1;
+	break;
+      case KEY_C3:
+	mixer_hscroll_delta += 1;
+	mixer_vscroll_delta += 1;
+	break;
+      case KEY_RIGHT:
+      case 'n':
+	mixer_hscroll_delta += 1;
+	break;
+      case KEY_LEFT:
+      case 'p':
+	mixer_hscroll_delta -= 1;
+	break;
+      case KEY_UP:
+      case 'w':
+      case 'W':
+	mixer_vscroll_delta -= 1;
+	break;
+      case KEY_DOWN:
+      case 'x':
+      case 'X':
+	mixer_vscroll_delta += 1;
+	break;
+      case KEY_PPAGE:
+      case 'B':
+      case 'b':
+	mixer_vscroll_delta -= (mixer_max_y - 5) / 2;
+	break;
+      case KEY_NPAGE:
+      case ' ':
+	mixer_vscroll_delta += (mixer_max_y - 5) / 2;
+	break;
+      case KEY_BEG:
+      case KEY_HOME:
+	mixer_hscroll_delta -= 0xffffff;
+	break;
+      case KEY_LL:
+      case KEY_END:
+	mixer_hscroll_delta += 0xffffff;
+	break;
+      }
+  
+  if (key && mixer_view == VIEW_CHANNELS)
+    switch (key)
+      {
+      case KEY_RIGHT:
+      case 'n':
+	mixer_focus_elem += 1;
+	break;
+      case KEY_LEFT:
+      case 'p':
+	mixer_focus_elem -= 1;
+	break;
+      case KEY_PPAGE:
+        mixer_set_delta(5);
+	break;
+      case KEY_NPAGE:
+        mixer_set_delta(-5);
+	break;
+#if 0
+      case KEY_BEG:
+      case KEY_HOME:
+        mixer_set_delta(100);
+	break;
+#endif
+      case KEY_LL:
+      case KEY_END:
+        mixer_set_delta(-100);
+	break;
+      case '+':
+        mixer_set_delta(1);
+	break;
+      case '-':
+        mixer_set_delta(-1);
+	break;
+      case 'w':
+      case KEY_UP:
+        mixer_set_delta(1);
+      case 'W':
+        mixer_add_delta(1);
+	break;
+      case 'x':
+      case KEY_DOWN:
+        mixer_set_delta(-1);
+      case 'X':
+        mixer_add_delta(-1);
+	break;
+      case 'q':
+	mixer_volume_delta[MIXER_CHN_LEFT] = 1;
+      case 'Q':
+	mixer_volume_delta[MIXER_CHN_LEFT] += 1;
+	break;
+      case 'y':
+      case 'z':
+	mixer_volume_delta[MIXER_CHN_LEFT] = -1;
+      case 'Y':
+      case 'Z':
+	mixer_volume_delta[MIXER_CHN_LEFT] += -1;
+	break;
+      case 'e':
+	mixer_volume_delta[MIXER_CHN_RIGHT] = 1;
+      case 'E':
+	mixer_volume_delta[MIXER_CHN_RIGHT] += 1;
+	break;
+      case 'c':
+	mixer_volume_delta[MIXER_CHN_RIGHT] = -1;
+      case 'C':
+	mixer_volume_delta[MIXER_CHN_RIGHT] += -1;
+	break;
+      case 'm':
+      case 'M':
+	mixer_toggle_mute |= MIXER_MASK_STEREO;
+	break;
+      case 'b':
+      case 'B':
+      case '=':
+	mixer_balance_volumes = 1;
+	break;
+      case '<':
+      case ',':
+	mixer_toggle_mute |= MIXER_MASK_LEFT;
+	break;
+      case '>':
+      case '.':
+	mixer_toggle_mute |= MIXER_MASK_RIGHT;
+	break;
+      case ' ':
+	mixer_toggle_capture |= MIXER_MASK_STEREO;
+	break;
+      case KEY_IC:
+      case ';':
+	mixer_toggle_capture |= MIXER_MASK_LEFT;
+	break;
+      case '\'':
+      case KEY_DC:
+	mixer_toggle_capture |= MIXER_MASK_RIGHT;
+	break;
+      }
+  
+  if (old_view != mixer_view)
+    mixer_clear (FALSE);
+  
+  mixer_focus_elem = CLAMP (mixer_focus_elem, 0, mixer_n_elems - 1);
+  
+  return finished;
+}
+
+static void
+mixer_winch (void)
+{
+  signal (SIGWINCH, (void*) mixer_winch);
+
+  mixer_needs_resize++;
+}
+
+static void
+mixer_signal_handler (int signal)
+{
+  if (signal != SIGSEGV)
+    mixer_abort (ERR_SIGNAL, sys_siglist[signal], 0);
+  else
+    {
+      fprintf (stderr, "\nSegmentation fault.\n");
+      _exit (11);
+    }
+}
+
+int
+main (int    argc,
+      char **argv)
+{
+  int opt;
+  
+  /* parse args
+   */
+  do
+    {
+      opt = getopt (argc, argv, "c:D:shg");
+      switch (opt)
+	{
+	case '?':
+	case 'h':
+	  fprintf (stderr, "%s %s\n", PRGNAME_UPPER, VERSION);
+	  fprintf (stderr, "Usage: %s [-h] [-c <card: 0...7 or id>] [-D <mixer device>] [-g] [-s]\n", PRGNAME);
+	  mixer_abort (ERR_NONE, "", 0);
+	case 'c':
+	  {
+	    int i = snd_card_get_index(optarg);
+	    if (i < 0 || i > 31) {
+	      fprintf (stderr, "wrong -c argument '%s'\n", optarg);
+	      mixer_abort (ERR_NONE, "", 0);
+	    }
+	    sprintf(card_id, "hw:%i", i);
+	  }
+ 	  break;
+	case 'D':
+	  strncpy(card_id, optarg, sizeof(card_id));
+	  card_id[sizeof(card_id)-1] = '\0';
+	  break;
+	case 'g':
+	  mixer_do_color = !mixer_do_color;
+	  break;
+	case 's':
+	  mixer_minimize = 1;
+	  break;
+	}
+    }
+  while (opt > 0);
+  
+  /* initialize mixer
+   */
+  mixer_init ();
+  mixer_reinit ();
+  
+  if (mixer_n_elems == 0) {
+    fprintf(stderr, "No mixer elems found\n");
+    mixer_abort (ERR_NONE, "", 0);
+  }
+
+  /* setup signal handlers
+   */
+  signal (SIGINT, mixer_signal_handler);
+  signal (SIGTRAP, mixer_signal_handler);
+  // signal (SIGABRT, mixer_signal_handler);
+  signal (SIGQUIT, mixer_signal_handler);
+  signal (SIGBUS, mixer_signal_handler);
+  signal (SIGSEGV, mixer_signal_handler);
+  signal (SIGPIPE, mixer_signal_handler);
+  signal (SIGTERM, mixer_signal_handler);
+  
+  /* initialize ncurses
+   */
+  mixer_init_window ();
+  if (mixer_max_x < MIXER_MIN_X ||
+      mixer_max_y < MIXER_MIN_Y)
+    beep (); // mixer_abort (ERR_WINSIZE, "");
+  
+  signal (SIGWINCH, (void*) mixer_winch);
+
+  do
+    {
+      /* draw window upon every iteration */
+      if (!mixer_needs_resize)
+	{
+	  switch (mixer_view)
+	    {
+	    case VIEW_CHANNELS:
+	      mixer_update_cbars ();
+	      break;
+	    case VIEW_HELP:
+	      mixer_show_text ("Help", mixer_help_text, &mixer_help_xoffs, &mixer_help_yoffs);
+	      break;
+	    case VIEW_PROCINFO:
+	      mixer_show_procinfo ();
+	      break;
+	    }
+	  mixer_draw_frame ();
+	  refresh ();
+	}
+    }
+  while (!mixer_iteration ());
+  
+  mixer_abort (ERR_NONE, "", 0);
+};
Index: debian/alsa-utils/amidi/Makefile.am
diff -u debian/alsa-utils/amidi/Makefile.am:1.3 debian/alsa-utils/amidi/Makefile.am:1.4
--- debian/alsa-utils/amidi/Makefile.am:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amidi/Makefile.am	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,5 @@
+INCLUDES = -I$(top_srcdir)/include
+EXTRA_DIST = amidi.1
+
+bin_PROGRAMS = amidi
+man_MANS = amidi.1
Index: debian/alsa-utils/amidi/Makefile.in
diff -u debian/alsa-utils/amidi/Makefile.in:1.3 debian/alsa-utils/amidi/Makefile.in:1.4
--- debian/alsa-utils/amidi/Makefile.in:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amidi/Makefile.in	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,446 @@
+# Makefile.in generated by automake 1.7.5b from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+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@
+ALSAMIXER_FALSE = @ALSAMIXER_FALSE@
+ALSAMIXER_TRUE = @ALSAMIXER_TRUE@
+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@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+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@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+STRIP = @STRIP@
+TESTSOUND = @TESTSOUND@
+VERSION = @VERSION@
+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__leading_dot = @am__leading_dot@
+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@
+INCLUDES = -I$(top_srcdir)/include
+EXTRA_DIST = amidi.1
+
+bin_PROGRAMS = amidi
+man_MANS = amidi.1
+subdir = amidi
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = amidi$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+amidi_SOURCES = amidi.c
+amidi_OBJECTS = amidi.$(OBJEXT)
+amidi_LDADD = $(LDADD)
+amidi_DEPENDENCIES =
+amidi_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/amidi.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = amidi.c
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = amidi.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  amidi/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+amidi$(EXEEXT): $(amidi_OBJECTS) $(amidi_DEPENDENCIES) 
+	@rm -f amidi$(EXEEXT)
+	$(LINK) $(amidi_LDFLAGS) $(amidi_OBJECTS) $(amidi_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amidi.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 -f "$(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 -f "$(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`
+uninstall-info-am:
+
+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
+
+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)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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; }'`; \
+	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
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@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
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+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:
+
+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."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic ctags distclean distclean-compile \
+	distclean-depend distclean-generic distclean-tags distdir dvi \
+	dvi-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-man1 \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-info-am uninstall-man uninstall-man1
+
+# 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:
Index: debian/alsa-utils/amidi/amidi.1
diff -u debian/alsa-utils/amidi/amidi.1:1.3 debian/alsa-utils/amidi/amidi.1:1.4
--- debian/alsa-utils/amidi/amidi.1:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amidi/amidi.1	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,151 @@
+.TH AMIDI 1 "27 Oct 2003"
+
+.SH NAME
+amidi \- read from and write to ALSA RawMIDI ports
+
+.SH SYNOPSIS
+.B amidi
+.I options
+
+.SH DESCRIPTION
+.B amidi
+is a command-line utility which allows to receive and send
+SysEx (system exclusive) data from/to external MIDI devices.
+It can also send any other MIDI commands.
+
+.B amidi
+handles only files containing raw MIDI commands, without timing
+information.
+Standard MIDI (.mid) files are not supported.
+
+.SH INVOKING
+.B amidi
+.I options
+
+Use the
+.I -h,
+.I -V,
+.I -l,
+or
+.I -L
+options to display information;
+or use at least one of the
+.I -s,
+.I -r,
+.I -S,
+or
+.I -d
+options to specify what data to send or receive.
+
+.SS Options
+
+.TP
+.I -h, --help
+Help: prints a list of options.
+
+.TP
+.I -V, --version
+Prints the current version.
+
+.TP
+.I -l, --list-devices
+Prints a list of all hardware MIDI ports.
+
+.TP
+.I -L, --list-rawmidis
+Prints all RawMIDI definitions.
+(used when debugging configuration files)
+
+.TP
+.I -p, --port=name
+Sets the name of the ALSA RawMIDI port to use.
+If this is not specified,
+.B amidi
+uses the default port defined in the configuration file
+(the default for this is port 0 on card 0, which may not exist).
+
+.TP
+.I -s, --send=filename
+Sends the contents of the specified file to the MIDI port.
+The file must contain raw MIDI commands (e.g. a .syx file);
+you can
+.I not
+use a Standard MIDI (.mid) file for this.
+
+.TP
+.I -r, --receive=filename
+Writes data received from the MIDI port into the specified file.
+The file will contain raw MIDI commands (such as in a .syx file);
+this will
+.I not
+create a Standard MIDI (.mid) file.
+
+.B amidi
+will filter out any Active Sensing bytes (FEh).
+
+.TP
+.I -S, --send-hex="..."
+Sends the bytes specified as hexadecimal numbers to the MIDI port.
+
+.TP
+.I -d, --dump
+Prints data received from the MIDI port as hexadecimal bytes.
+Active Sensing bytes (FEh) will not be shown.
+
+This option is useful for debugging.
+
+.TP
+.I -t, --timeout=seconds
+Stops receiving data when no data has been received for the specified
+amount of time.
+
+If this option has not been given, you must press Ctrl+C (or kill
+.B amidi\fR)
+to stop receiving data.
+
+.SH EXAMPLES
+
+.SS
+.B amidi -p hw:0 -s my_settings.syx
+.ID
+will send the MIDI commands in
+.I my_settings.syx
+to port
+.I hw:0.
+
+.SS
+.B amidi -S 'F0 43 10 4C 00 00 7E 00 F7'
+.ID
+sends an XG Reset to the default port.
+
+.SS
+.B amidi -p hw:1,2 -S F0411042110C000000000074F7 -r dump.syx -t 1
+.ID
+sends a \(lqParameter Dump Request\(rq to a GS device, saves the received
+parameter data to the file
+.I dump.syx,
+and stops after the device has finished sending data
+(when no data has been received for one second).
+
+.SS
+.B amidi -p virtual -d
+.ID
+creates a virtual RawMIDI port and prints all data sent to this port.
+
+.SH FILES
+.I /usr/share/alsa/alsa.conf
+default rawmidi definitions
+.br
+.I /etc/asound.conf
+system-wide rawmidi definitions
+.br
+.I ~/.asoundrc
+user specific rawmidi definitions
+
+.SH BUGS
+The
+.I --list-devices
+option pretends that output and input ports are the same.
+
+.SH AUTHOR
+Clemens Ladisch <clemens@ladisch.de>
Index: debian/alsa-utils/amidi/amidi.c
diff -u debian/alsa-utils/amidi/amidi.c:1.3 debian/alsa-utils/amidi/amidi.c:1.4
--- debian/alsa-utils/amidi/amidi.c:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amidi/amidi.c	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,558 @@
+/*
+ *  amidi.c - read from/write to RawMIDI ports
+ *
+ *  Copyright (c) Clemens Ladisch <clemens@ladisch.de>
+ *
+ *
+ *   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
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+#include <getopt.h>
+#include <errno.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/poll.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <alsa/asoundlib.h>
+#include "aconfig.h"
+#include "version.h"
+
+static int do_device_list, do_rawmidi_list;
+static char *port_name = "default";
+static char *send_file_name;
+static char *receive_file_name;
+static char *send_hex;
+static char *send_data;
+static int send_data_length;
+static int receive_file;
+static int dump;
+static int timeout;
+static int stop;
+static snd_rawmidi_t *input, **inputp;
+static snd_rawmidi_t *output, **outputp;
+
+static void error(const char *format, ...)
+{
+	va_list ap;
+
+	va_start(ap, format);
+	vfprintf(stderr, format, ap);
+	va_end(ap);
+	putc('\n', stderr);
+}
+
+static void usage(void)
+{
+	fprintf(stderr,
+		"Usage: amidi options\n"
+		"\n"
+		"-h, --help             this help\n"
+		"-V, --version          print current version\n"
+		"-l, --list-devices     list all hardware ports\n"
+		"-L, --list-rawmidis    list all RawMIDI definitions\n"
+		"-p, --port=name        select port by name\n"
+		"-s, --send=file        send the contents of a (.syx) file\n"
+		"-r, --receive=file     write received data into a file\n"
+		"-S, --send-hex=\"...\"   send hexadecimal bytes\n"
+		"-d, --dump             print received data as hexadecimal bytes\n"
+		"-t, --timeout=seconds  exits when no data has been received\n"
+		"                       for the specified duration\n");
+}
+
+static void version(void)
+{
+	fputs("amidi version " SND_UTIL_VERSION_STR "\n", stderr);
+}
+
+static void list_device(snd_ctl_t *ctl, int card, int device)
+{
+	snd_rawmidi_info_t *info;
+	const char *name;
+	const char *sub_name;
+	int subs;
+	int err;
+
+	snd_rawmidi_info_alloca(&info);
+	snd_rawmidi_info_set_device(info, device);
+	snd_rawmidi_info_set_subdevice(info, 0);
+	snd_rawmidi_info_set_stream(info, SND_RAWMIDI_STREAM_OUTPUT);
+	if ((err = snd_ctl_rawmidi_info(ctl, info)) < 0 &&
+	    err != -ENOENT) {
+		error("cannot get rawmidi information %d:%d: %s",
+		      card, device, snd_strerror(err));
+		return;
+	}
+	if (err == -ENOENT) {
+		snd_rawmidi_info_set_stream(info, SND_RAWMIDI_STREAM_INPUT);
+		if ((err = snd_ctl_rawmidi_info(ctl, info)) < 0 &&
+		    err != -ENOENT) {
+			error("cannot get rawmidi information %d:%d: %s",
+			      card, device, snd_strerror(err));
+			return;
+		}
+	}
+	if (err == -ENOENT)
+		return;
+	name = snd_rawmidi_info_get_name(info);
+	sub_name = snd_rawmidi_info_get_subdevice_name(info);
+	subs = snd_rawmidi_info_get_subdevices_count(info);
+	if (sub_name[0] == '\0') {
+		if (subs == 1)
+			printf("hw:%d,%d    %s\n", card, device, name);
+		else
+			printf("hw:%d,%d    %s (%d subdevices)\n",
+			       card, device, name, subs);
+	} else {
+		int sub = 0;
+		for (;;) {
+			printf("hw:%d,%d,%d  %s\n",
+			       card, device, sub, sub_name);
+			if (++sub >= subs)
+				break;
+			snd_rawmidi_info_set_subdevice(info, sub);
+			if ((err = snd_ctl_rawmidi_info(ctl, info)) < 0) {
+				error("cannot get rawmidi information %d:%d:%d: %s",
+				      card, device, sub, snd_strerror(err));
+				break;
+			}
+			sub_name = snd_rawmidi_info_get_subdevice_name(info);
+		}
+	}
+}
+
+static void list_card_devices(int card)
+{
+	snd_ctl_t *ctl;
+	char name[32];
+	int device;
+	int err;
+
+	sprintf(name, "hw:%d", card);
+	if ((err = snd_ctl_open(&ctl, name, 0)) < 0) {
+		error("cannot open control for card %d: %s", card, snd_strerror(err));
+		return;
+	}
+	device = -1;
+	for (;;) {
+		if ((err = snd_ctl_rawmidi_next_device(ctl, &device)) < 0) {
+			error("cannot determine device number: %s", snd_strerror(err));
+			break;
+		}
+		if (device < 0)
+			break;
+		list_device(ctl, card, device);
+	}
+	snd_ctl_close(ctl);
+}
+
+static void device_list(void)
+{
+	int card, err;
+
+	card = -1;
+	if ((err = snd_card_next(&card)) < 0) {
+		error("cannot determine card number: %s", snd_strerror(err));
+		return;
+	}
+	if (card < 0) {
+		error("no sound card found");
+		return;
+	}
+	puts("Device    Name");
+	do {
+		list_card_devices(card);
+		if ((err = snd_card_next(&card)) < 0) {
+			error("cannot determine card number: %s", snd_strerror(err));
+			break;
+		}
+	} while (card >= 0);
+}
+
+static void rawmidi_list(void)
+{
+	snd_output_t *output;
+	snd_config_t *config;
+	int err;
+
+	if ((err = snd_config_update()) < 0) {
+		error("snd_config_update failed: %s", snd_strerror(err));
+		return;
+	}
+	if ((err = snd_output_stdio_attach(&output, stdout, 0)) < 0) {
+		error("snd_output_stdio_attach failed: %s", snd_strerror(err));
+		return;
+	}
+	if (snd_config_search(snd_config, "rawmidi", &config) >= 0) {
+		puts("RawMIDI list:");
+		snd_config_save(config, output);
+	}
+	snd_output_close(output);
+}
+
+static void load_file(void)
+{
+	int fd;
+	off_t length;
+
+	fd = open(send_file_name, O_RDONLY);
+	if (fd == -1) {
+		error("cannot open %s - %s", send_file_name, strerror(errno));
+		return;
+	}
+	length = lseek(fd, 0, SEEK_END);
+	if (length == (off_t)-1) {
+		error("cannot determine length of %s: %s", send_file_name, strerror(errno));
+		goto _error;
+	}
+	send_data = malloc(length);
+	if (!send_data) {
+		error("cannot allocate %d bytes: %s", (int)length, strerror(errno));
+		goto _error;
+	}
+	lseek(fd, 0, SEEK_SET);
+	if (read(fd, send_data, length) != length) {
+		error("cannot read from %s: %s", send_file_name, strerror(errno));
+		goto _error;
+	}
+	send_data_length = length;
+	goto _exit;
+_error:
+	free(send_data);
+_exit:
+	close(fd);
+}
+
+static int hex_value(char c)
+{
+	if ('0' <= c && c <= '9')
+		return c - '0';
+	if ('A' <= c && c <= 'F')
+		return c - 'A' + 10;
+	if ('a' <= c && c <= 'f')
+		return c - 'a' + 10;
+	error("invalid character %c", c);
+	return -1;
+}
+
+static void parse_data(void)
+{
+	const char *p;
+	int i, value;
+
+	send_data = malloc(strlen(send_hex)); /* guesstimate */
+	i = 0;
+	value = -1; /* value is >= 0 when the first hex digit of a byte has been read */
+	for (p = send_hex; *p; ++p) {
+		int digit;
+		if (isspace((unsigned char)*p)) {
+			if (value >= 0) {
+				send_data[i++] = value;
+				value = -1;
+			}
+			continue;
+		}
+		digit = hex_value(*p);
+		if (digit < 0) {
+			send_data = NULL;
+			return;
+		}
+		if (value < 0) {
+			value = digit;
+		} else {
+			send_data[i++] = (value << 4) | digit;
+			value = -1;
+		}
+	}
+	if (value >= 0)
+		send_data[i++] = value;
+	send_data_length = i;
+}
+
+/*
+ * prints MIDI commands, formatting them nicely
+ */
+static void print_byte(unsigned char byte)
+{
+	static enum {
+		STATE_UNKNOWN,
+		STATE_1PARAM,
+		STATE_1PARAM_CONTINUE,
+		STATE_2PARAM_1,
+		STATE_2PARAM_2,
+		STATE_2PARAM_1_CONTINUE,
+		STATE_SYSEX
+	} state = STATE_UNKNOWN;
+	int newline = 0;
+
+	if (byte >= 0xf8)
+		newline = 1;
+	else if (byte >= 0xf0) {
+		newline = 1;
+		switch (byte) {
+		case 0xf0:
+			state = STATE_SYSEX;
+			break;
+		case 0xf1:
+		case 0xf3:
+			state = STATE_1PARAM;
+			break;
+		case 0xf2:
+			state = STATE_2PARAM_1;
+			break;
+		case 0xf4:
+		case 0xf5:
+		case 0xf6:
+			state = STATE_UNKNOWN;
+			break;
+		case 0xf7:
+			newline = state != STATE_SYSEX;
+			state = STATE_UNKNOWN;
+			break;
+		}
+	} else if (byte >= 0x80) {
+		newline = 1;
+		if (byte >= 0xc0 && byte <= 0xdf)
+			state = STATE_1PARAM;
+		else
+			state = STATE_2PARAM_1;
+	} else /* b < 0x80 */ {
+		int running_status = 0;
+		newline = state == STATE_UNKNOWN;
+		switch (state) {
+		case STATE_1PARAM:
+			state = STATE_1PARAM_CONTINUE;
+			break;
+		case STATE_1PARAM_CONTINUE:
+			running_status = 1;
+			break;
+		case STATE_2PARAM_1:
+			state = STATE_2PARAM_2;
+			break;
+		case STATE_2PARAM_2:
+			state = STATE_2PARAM_1_CONTINUE;
+			break;
+		case STATE_2PARAM_1_CONTINUE:
+			running_status = 1;
+			state = STATE_2PARAM_2;
+			break;
+		default:
+			break;
+		}
+		if (running_status)
+			fputs("\n  ", stdout);
+	}
+	printf("%c%02X", newline ? '\n' : ' ', byte);
+}
+
+static void sig_handler(int dummy)
+{
+	stop = 1;
+}
+
+int main(int argc, char *argv[])
+{
+	static char short_options[] = "hVlLp:s:r:S:dt:";
+	static struct option long_options[] = {
+		{"help", 0, NULL, 'h'},
+		{"version", 0, NULL, 'V'},
+		{"list-devices", 0, NULL, 'l'},
+		{"list-rawmidis", 0, NULL, 'L'},
+		{"port", 1, NULL, 'p'},
+		{"send", 1, NULL, 's'},
+		{"receive", 1, NULL, 'r'},
+		{"send-hex", 1, NULL, 'S'},
+		{"dump", 0, NULL, 'd'},
+		{"timeout", 1, NULL, 't'},
+		{ }
+	};
+	int c, err, ok = 0;
+
+	while ((c = getopt_long(argc, argv, short_options,
+		     		long_options, NULL)) != -1) {
+		switch (c) {
+		case 'h':
+			usage();
+			return 0;
+		case 'V':
+			version();
+			return 0;
+		case 'l':
+			do_device_list = 1;
+			break;
+		case 'L':
+			do_rawmidi_list = 1;
+			break;
+		case 'p':
+			port_name = optarg;
+			break;
+		case 's':
+			send_file_name = optarg;
+			break;
+		case 'r':
+			receive_file_name = optarg;
+			break;
+		case 'S':
+			send_hex = optarg;
+			break;
+		case 'd':
+			dump = 1;
+			break;
+		case 't':
+			timeout = atoi(optarg);
+			break;
+		default:
+			error("Try `amidi --help' for more information.");
+			return 1;
+		}
+	}
+
+	if (do_rawmidi_list)
+		rawmidi_list();
+	if (do_device_list)
+		device_list();
+	if (do_rawmidi_list || do_device_list)
+		return 0;
+
+	if (!send_file_name && !receive_file_name && !send_hex && !dump) {
+		error("Please specify at least one of --send, --receive, --send-hex, or --dump.");
+		return 1;
+	}
+	if (send_file_name && send_hex) {
+		error("--send and --send-hex cannot be specified at the same time.");
+		return 1;
+	}
+
+	if (send_file_name)
+		load_file();
+	else if (send_hex)
+		parse_data();
+	if ((send_file_name || send_hex) && !send_data)
+		return 1;
+
+	if (receive_file_name) {
+		receive_file = creat(receive_file_name, 0);
+		if (receive_file == -1) {
+			error("cannot create %s: %s", receive_file_name, strerror(errno));
+			return -1;
+		}
+	} else {
+		receive_file = -1;
+	}
+
+	if (receive_file_name || dump)
+		inputp = &input;
+	else
+		inputp = NULL;
+	if (send_data)
+		outputp = &output;
+	else
+		outputp = NULL;
+
+	if ((err = snd_rawmidi_open(inputp, outputp, port_name, 0)) < 0) {
+		error("cannot open port \"%s\": %s", port_name, snd_strerror(err));
+		goto _exit2;
+	}
+
+	if (inputp)
+		snd_rawmidi_read(input, NULL, 0); /* trigger reading */
+
+	if (send_data &&
+	    ((err = snd_rawmidi_write(output, send_data, send_data_length))) < 0) {
+		error("cannot send data: %s", snd_strerror(err));
+		goto _exit;
+	}
+
+	if (inputp) {
+		int read = 0;
+		int npfds, time = 0;
+		struct pollfd *pfds;
+
+		timeout *= 1000;
+		snd_rawmidi_nonblock(input, 1);
+		npfds = snd_rawmidi_poll_descriptors_count(input);
+		pfds = alloca(npfds * sizeof(struct pollfd));
+		snd_rawmidi_poll_descriptors(input, pfds, npfds);
+		signal(SIGINT, sig_handler);
+		for (;;) {
+			unsigned char buf[256];
+			int i, length;
+			unsigned short revents;
+
+			err = poll(pfds, npfds, 200);
+			if (stop || (err < 0 && errno == EINTR))
+				break;
+			if (err < 0) {
+				error("poll failed: %s", strerror(errno));
+				break;
+			}
+			if (err == 0) {
+				time += 200;
+				if (timeout && time >= timeout)
+					break;
+				continue;
+			}
+			if ((err = snd_rawmidi_poll_descriptors_revents(input, pfds, npfds, &revents)) < 0) {
+				error("cannot get poll events: %s", snd_strerror(errno));
+				break;
+			}
+			if (revents & (POLLERR | POLLHUP))
+				break;
+			if (!(revents & POLLIN))
+				continue;
+			err = snd_rawmidi_read(input, buf, sizeof(buf));
+			if (err == -EAGAIN)
+				continue;
+			if (err < 0) {
+				error("cannot read from port \"%s\": %s", port_name, snd_strerror(err));
+				break;
+			}
+			length = 0;
+			for (i = 0; i < err; ++i)
+				if (buf[i] != 0xfe) /* drop any active sensing bytes */
+					buf[length++] = buf[i];
+			if (length == 0)
+				continue;
+			read += length;
+			time = 0;
+			if (receive_file != -1)
+				write(receive_file, buf, length);
+			if (dump) {
+				for (i = 0; i < length; ++i)
+					print_byte(buf[i]);
+				fflush(stdout);
+			}
+		}
+		printf("\n%d bytes read\n", read);
+	}
+
+	ok = 1;
+_exit:
+	if (inputp)
+		snd_rawmidi_close(input);
+	if (outputp)
+		snd_rawmidi_close(output);
+_exit2:
+	if (receive_file != -1)
+		close(receive_file);
+	return !ok;
+}
Index: debian/alsa-utils/amixer/Makefile.am
diff -u debian/alsa-utils/amixer/Makefile.am:1.3 debian/alsa-utils/amixer/Makefile.am:1.4
--- debian/alsa-utils/amixer/Makefile.am:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amixer/Makefile.am	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,10 @@
+INCLUDES = -I$(top_srcdir)/include
+LDADD = -lm
+# LDFLAGS = -static
+# CFLAGS += -g -Wall
+
+bin_PROGRAMS = amixer
+amixer_SOURCES = amixer.c
+noinst_HEADERS = amixer.h
+man_MANS = amixer.1
+EXTRA_DIST = amixer.1
Index: debian/alsa-utils/amixer/Makefile.in
diff -u debian/alsa-utils/amixer/Makefile.in:1.3 debian/alsa-utils/amixer/Makefile.in:1.4
--- debian/alsa-utils/amixer/Makefile.in:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amixer/Makefile.in	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,362 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+INCLUDES = -I$(top_srcdir)/include
+LDADD = -lm
+
+# LDFLAGS = -static
+# CFLAGS += -g -Wall
+bin_PROGRAMS = amixer
+amixer_SOURCES = amixer.c
+noinst_HEADERS = amixer.h
+man_MANS = amixer.1
+EXTRA_DIST = amixer.1
+subdir = amixer
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = amixer$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_amixer_OBJECTS = amixer.$(OBJEXT)
+amixer_OBJECTS = $(am_amixer_OBJECTS)
+amixer_LDADD = $(LDADD)
+amixer_DEPENDENCIES =
+amixer_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/amixer.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(amixer_SOURCES)
+
+NROFF = nroff
+MANS = $(man_MANS)
+HEADERS = $(noinst_HEADERS)
+
+DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in
+SOURCES = $(amixer_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  amixer/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+amixer$(EXEEXT): $(amixer_OBJECTS) $(amixer_DEPENDENCIES) 
+	@rm -f amixer$(EXEEXT)
+	$(LINK) $(amixer_LDFLAGS) $(amixer_OBJECTS) $(amixer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/amixer.Po@am__quote@
+
+distclean-depend:
+	-rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+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/^.*\\.//'`; \
+	  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/^.*\\.//'`; \
+	  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
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS) $(HEADERS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic distclean distclean-compile distclean-depend \
+	distclean-generic distclean-tags distdir dvi dvi-am info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-man1 install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+	uninstall-man1
+
+# 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:
Index: debian/alsa-utils/amixer/amixer.1
diff -u debian/alsa-utils/amixer/amixer.1:1.3 debian/alsa-utils/amixer/amixer.1:1.4
--- debian/alsa-utils/amixer/amixer.1:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amixer/amixer.1	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,127 @@
+.TH AMIXER 1 "11 Aug 2000"
+.SH NAME
+amixer \- command-line mixer for ALSA soundcard driver
+.SH SYNOPSIS
+\fBamixer\fP [\fI-c\fP card] [\fIcmd\fP]
+.SH DESCRIPTION
+\fBamixer\fP allows command-line control of the mixer for the ALSA
+soundcard driver.
+\fBamixer\fP supports multiple soundcards.
+.SH INVOKING
+
+\fBamixer\fR with no arguments will display the current mixer settings
+for the default soundcard and device. This is a good way to see a list
+of the simple mixer controls you can use.
+
+.SH COMMANDS
+
+.TP
+\fIhelp\fP
+Shows syntax.
+
+.TP
+\fIinfo\fP
+Shows the information about a mixer device.
+
+.TP
+\fIscontrols\fP
+Shows a complete list of simple mixer controls.
+
+.TP
+\fIscontents\fP
+Shows a complete list of simple mixer controls with their contents.
+
+.TP
+\fIset\fP or \fIsset\fP <\fISCONTROL\fP> <\fIPARAMETER\fP> ...
+Sets the simple mixer control contents. The parameter can be the volume
+either as a percentage from 0% to 100% or an exact hardware value.
+The parameters \fIcap, nocap, mute, unmute, toggle\fP are used to
+change capture (recording) and muting for the group specified.
+The parameters \fIfront, rear, center, woofer\fP are used to specify
+channels to be changed. When plus(+) or minus(-) letter is appended after
+volume value, the volume is incremented or decremented from the current
+value, respectively.
+
+A simple mixer control must be specified. Only one device can be controlled
+at a time.
+
+.TP
+\fIget\fP or \fIsget\fP <\fISCONTROL\fP>
+Shows the simple mixer control contents.
+
+A simple mixer control must be specified. Only one device can be controlled
+at a time.
+
+.TP
+\fIcontrols\fP
+Shows a complete list of card controls.
+
+.TP
+\fIcontents\fP
+Shows a complete list of card controls with their contents.
+
+.TP
+\fIcset\fP <\fICONTROL\fP> <\fIPARAMETER\fP> ...
+Sets the card control contents. The identifier has these components: iface,
+name, index, device, subdevice, numid. The next argument specifies the value
+of control.
+
+.TP
+\fIcget\fP <\fICONTROL\fP>
+Shows the card control contents. The identifier has same syntax as for
+the \fIcset]fP command.
+
+.SS Options
+
+.TP
+[\fI-c\fP card]
+
+Select the card number to control. The device name created from this
+parameter has syntax 'hw:N' where N is specified card number.
+
+.TP
+[\fI-D\fP device]
+
+Select the device name to control. The default control name is 'default'.
+
+.TP
+\fI-h\fP 
+Help: show syntax.
+.TP
+\fI-q\fP
+Quiet mode. Do not show results of changes.
+
+.SS
+Example #1:
+
+.RS
+\fBamixer -c 1 sset Line,0 80%,40% unmute cap\fR
+
+.ID
+will set the second soundcard's left line input volume to 80% and
+right line input to 40%, unmute it, and select it as a source for
+capture (recording).\fR
+
+.SS
+Example #2:
+
+.RS
+\fBamixer -c 2 cset iface=MIXER,name='Line Playback Volume",index=1 40%\fR
+
+.ID
+will set the third soundcard's second line playback volume(s) to 40%
+
+.SS
+Example #3:
+
+.RS
+\fBamixer -c 2 cset numid=34 40%\fR
+
+.ID
+will set the 34th soundcard element to 40%
+
+.SH BUGS 
+None known.
+.SH AUTHOR
+\fBamixer\fP is by Jaroslav Kysela <perex@suse.cz>.
+This document is by Paul Winkler <zarmzarm@erols.com> and Jaroslav Kysela <perex@suse.cz>.
Index: debian/alsa-utils/amixer/amixer.c
diff -u debian/alsa-utils/amixer/amixer.c:1.3 debian/alsa-utils/amixer/amixer.c:1.4
--- debian/alsa-utils/amixer/amixer.c:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amixer/amixer.c	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,1548 @@
+/*
+ *   ALSA command line mixer utility
+ *   Copyright (c) 1999-2000 by Jaroslav Kysela <perex@suse.cz>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <math.h>
+#include <errno.h>
+#include <assert.h>
+#include <alsa/asoundlib.h>
+#include <sys/poll.h>
+#include "amixer.h"
+
+#define HELPID_HELP             1000
+#define HELPID_CARD             1001
+#define HELPID_DEVICE		1002
+#define HELPID_QUIET		1003
+#define HELPID_INACTIVE		1004
+#define HELPID_DEBUG            1005
+#define HELPID_VERSION		1006
+
+#define LEVEL_BASIC		(1<<0)
+#define LEVEL_INACTIVE		(1<<1)
+#define LEVEL_ID		(1<<2)
+
+int quiet = 0;
+int debugflag = 0;
+char card[64] = "default";
+
+static void error(const char *fmt,...)
+{
+	va_list va;
+
+	va_start(va, fmt);
+	fprintf(stderr, "amixer: ");
+	vfprintf(stderr, fmt, va);
+	fprintf(stderr, "\n");
+	va_end(va);
+}
+
+static int help(void)
+{
+	printf("Usage: amixer <options> command\n");
+	printf("\nAvailable options:\n");
+	printf("  -h,--help       this help\n");
+	printf("  -c,--card N     select the card\n");
+	printf("  -D,--device N   select the device, default '%s'\n", card);
+	printf("  -d,--debug      debug mode\n");
+	printf("  -v,--version    print version of this program\n");
+	printf("  -q,--quiet      be quiet\n");
+	printf("  -i,--inactive   show also inactive controls\n");
+	printf("\nAvailable commands:\n");
+	printf("  scontrols       show all mixer simple controls\n");
+	printf("  scontents	  show contents of all mixer simple controls (default command)\n");
+	printf("  sset sID P      set contents for one mixer simple control\n");
+	printf("  sget sID        get contents for one mixer simple control\n");
+	printf("  controls        show all controls for given card\n");
+	printf("  contents        show contents of all controls for given card\n");
+	printf("  cset cID P      set control contents for one control\n");
+	printf("  cget cID        get control contents for one control\n");
+	return 0;
+}
+
+static int info(void)
+{
+	int err;
+	snd_ctl_t *handle;
+	snd_mixer_t *mhandle;
+	snd_ctl_card_info_t *info;
+	snd_ctl_elem_list_t *clist;
+	snd_ctl_card_info_alloca(&info);
+	snd_ctl_elem_list_alloca(&clist);
+	
+	if ((err = snd_ctl_open(&handle, card, 0)) < 0) {
+		error("Control device %i open error: %s", card, snd_strerror(err));
+		return err;
+	}
+	
+	if ((err = snd_ctl_card_info(handle, info)) < 0) {
+		error("Control device %i hw info error: %s", card, snd_strerror(err));
+		return err;
+	}
+	printf("Card %s '%s'/'%s'\n", card, snd_ctl_card_info_get_id(info),
+	       snd_ctl_card_info_get_longname(info));
+	printf("  Mixer name	: '%s'\n", snd_ctl_card_info_get_mixername(info));
+	printf("  Components	: '%s'\n", snd_ctl_card_info_get_components(info));
+	if ((err = snd_ctl_elem_list(handle, clist)) < 0) {
+		error("snd_ctl_elem_list failure: %s", snd_strerror(err));
+	} else {
+		printf("  Controls      : %i\n", snd_ctl_elem_list_get_count(clist));
+	}
+	snd_ctl_close(handle);
+	if ((err = snd_mixer_open(&mhandle, 0)) < 0) {
+		error("Mixer open error: %s", snd_strerror(err));
+		return err;
+	}
+	if ((err = snd_mixer_attach(mhandle, card)) < 0) {
+		error("Mixer attach %s error: %s", card, snd_strerror(err));
+		snd_mixer_close(mhandle);
+		return err;
+	}
+	if ((err = snd_mixer_selem_register(mhandle, NULL, NULL)) < 0) {
+		error("Mixer register error: %s", snd_strerror(err));
+		snd_mixer_close(mhandle);
+		return err;
+	}
+	err = snd_mixer_load(mhandle);
+	if (err < 0) {
+		error("Mixer load error: %s", card, snd_strerror(err));
+		snd_mixer_close(mhandle);
+		return err;
+	}
+	printf("  Simple ctrls  : %i\n", snd_mixer_get_count(mhandle));
+	snd_mixer_close(mhandle);
+	return 0;
+}
+
+static const char *control_iface(snd_ctl_elem_id_t *id)
+{
+	return snd_ctl_elem_iface_name(snd_ctl_elem_id_get_interface(id));
+}
+
+static const char *control_type(snd_ctl_elem_info_t *info)
+{
+	return snd_ctl_elem_type_name(snd_ctl_elem_info_get_type(info));
+}
+
+static const char *control_access(snd_ctl_elem_info_t *info)
+{
+	static char result[10];
+	char *res = result;
+
+	*res++ = snd_ctl_elem_info_is_readable(info) ? 'r' : '-';
+	*res++ = snd_ctl_elem_info_is_writable(info) ? 'w' : '-';
+	*res++ = snd_ctl_elem_info_is_inactive(info) ? 'i' : '-';
+	*res++ = snd_ctl_elem_info_is_volatile(info) ? 'v' : '-';
+	*res++ = snd_ctl_elem_info_is_locked(info) ? 'l' : '-';
+	*res++ = '\0';
+	return result;
+}
+
+static int check_range(int val, int min, int max)
+{
+	if (val < min)
+		return min;
+	if (val > max)
+		return max;
+	return val;
+}
+
+#if 0
+static int convert_range(int val, int omin, int omax, int nmin, int nmax)
+{
+	int orange = omax - omin, nrange = nmax - nmin;
+	
+	if (orange == 0)
+		return 0;
+	return rint((((double)nrange * ((double)val - (double)omin)) + ((double)orange / 2.0)) / ((double)orange + (double)nmin));
+}
+#endif
+
+#if 0
+static int convert_db_range(int val, int omin, int omax, int nmin, int nmax)
+{
+	int orange = omax - omin, nrange = nmax - nmin;
+	
+	if (orange == 0)
+		return 0;
+	return rint((((double)nrange * ((double)val - (double)omin)) + ((double)orange / 2.0)) / (double)orange + (double)nmin);
+}
+#endif
+
+/* Fuction to convert from volume to percentage. val = volume */
+
+static int convert_prange(int val, int min, int max)
+{
+	int range = max - min;
+	int tmp;
+
+	if (range == 0)
+		return 0;
+	val -= min;
+	tmp = rint((double)val/(double)range * 100);
+	return tmp;
+}
+
+/* Function to convert from percentage to volume. val = percentage */
+
+static int convert_prange1(int val, int min, int max)
+{
+	int range = max - min;
+	int tmp;
+
+	if (range == 0)
+		return 0;
+
+	tmp = rint((double)range * ((double)val*.01)) + min;
+	return tmp;
+}
+
+static const char *get_percent(int val, int min, int max)
+{
+	static char str[32];
+	int p;
+	
+	p = convert_prange(val, min, max);
+	sprintf(str, "%i [%i%%]", val, p);
+	return str;
+}
+
+#if 0
+static const char *get_percent1(int val, int min, int max, int min_dB, int max_dB)
+{
+	static char str[32];
+	int p, db;
+
+	p = convert_prange(val, min, max);
+	db = convert_db_range(val, min, max, min_dB, max_dB);
+	sprintf(str, "%i [%i%%] [%i.%02idB]", val, p, db / 100, abs(db % 100));
+	return str;
+}
+#endif
+
+static long get_integer(char **ptr, long min, long max)
+{
+	int tmp, tmp1, tmp2;
+
+	if (**ptr == ':')
+		(*ptr)++;
+	if (**ptr == '\0' || (!isdigit(**ptr) && **ptr != '-'))
+		return min;
+	tmp = strtol(*ptr, ptr, 10);
+	tmp1 = tmp;
+	tmp2 = 0;
+	if (**ptr == '.') {
+		(*ptr)++;
+		tmp2 = strtol(*ptr, ptr, 10);
+	}
+	if (**ptr == '%') {
+		tmp1 = convert_prange1(tmp, min, max);
+		(*ptr)++;
+	}
+	tmp1 = check_range(tmp1, min, max);
+	if (**ptr == ',')
+		(*ptr)++;
+	return tmp1;
+}
+
+static long get_integer64(char **ptr, long long min, long long max)
+{
+	long long tmp, tmp1, tmp2;
+
+	if (**ptr == ':')
+		(*ptr)++;
+	if (**ptr == '\0' || (!isdigit(**ptr) && **ptr != '-'))
+		return min;
+	tmp = strtol(*ptr, ptr, 10);
+	tmp1 = tmp;
+	tmp2 = 0;
+	if (**ptr == '.') {
+		(*ptr)++;
+		tmp2 = strtol(*ptr, ptr, 10);
+	}
+	if (**ptr == '%') {
+		tmp1 = convert_prange1(tmp, min, max);
+		(*ptr)++;
+	}
+	tmp1 = check_range(tmp1, min, max);
+	if (**ptr == ',')
+		(*ptr)++;
+	return tmp1;
+}
+
+static int get_volume_simple(char **ptr, int min, int max, int orig)
+{
+	int tmp, tmp1, tmp2;
+
+	if (**ptr == ':')
+		(*ptr)++;
+	if (**ptr == '\0' || (!isdigit(**ptr) && **ptr != '-'))
+		return min;
+	tmp = atoi(*ptr);
+	if (**ptr == '-')
+		(*ptr)++;
+	while (isdigit(**ptr))
+		(*ptr)++;
+	tmp1 = tmp;
+	tmp2 = 0;
+	if (**ptr == '.') {
+		(*ptr)++;
+		tmp2 = atoi(*ptr);
+		while (isdigit(**ptr))
+			(*ptr)++;
+	}
+	if (**ptr == '%') {
+		tmp1 = convert_prange1(tmp, min, max);
+		(*ptr)++;
+	}
+	if (**ptr == '+') {
+		tmp1 = orig + tmp1;
+		(*ptr)++;
+	} else if (**ptr == '-') {
+		tmp1 = orig - tmp1;
+		(*ptr)++;
+	}
+	tmp1 = check_range(tmp1, min, max);
+	if (**ptr == ',')
+		(*ptr)++;
+	return tmp1;
+}
+
+static int get_bool_simple(char **ptr, char *str, int invert, int orig)
+{
+	if (**ptr == ':')
+		(*ptr)++;
+	if (!strncasecmp(*ptr, str, strlen(str))) {
+		orig = 1 ^ (invert ? 1 : 0);
+		while (**ptr != '\0' && **ptr != ',' && **ptr != ':')
+			(*ptr)++;
+	}
+	if (**ptr == ',' || **ptr == ':')
+		(*ptr)++;
+	return orig;
+}
+		
+static int simple_skip_word(char **ptr, char *str)
+{
+	char *xptr = *ptr;
+	if (*xptr == ':')
+		xptr++;
+	if (!strncasecmp(xptr, str, strlen(str))) {
+		while (*xptr != '\0' && *xptr != ',' && *xptr != ':')
+			xptr++;
+		if (*xptr == ',' || *xptr == ':')
+			xptr++;
+		*ptr = xptr;
+		return 1;
+	}
+	return 0;
+}
+		
+static void show_control_id(snd_ctl_elem_id_t *id)
+{
+	unsigned int index, device, subdevice;
+	printf("numid=%u,iface=%s,name='%s'",
+	       snd_ctl_elem_id_get_numid(id),
+	       control_iface(id),
+	       snd_ctl_elem_id_get_name(id));
+	index = snd_ctl_elem_id_get_index(id);
+	device = snd_ctl_elem_id_get_device(id);
+	subdevice = snd_ctl_elem_id_get_subdevice(id);
+	if (index)
+		printf(",index=%i", index);
+	if (device)
+		printf(",device=%i", device);
+	if (subdevice)
+		printf(",subdevice=%i", subdevice);
+}
+
+static int show_control(const char *space, snd_hctl_elem_t *elem,
+			int level)
+{
+	int err;
+	unsigned int item, idx;
+	unsigned int count;
+	snd_ctl_elem_type_t type;
+	snd_ctl_elem_id_t *id;
+	snd_ctl_elem_info_t *info;
+	snd_ctl_elem_value_t *control;
+	snd_ctl_elem_id_alloca(&id);
+	snd_ctl_elem_info_alloca(&info);
+	snd_ctl_elem_value_alloca(&control);
+	if ((err = snd_hctl_elem_info(elem, info)) < 0) {
+		error("Control %s snd_hctl_elem_info error: %s\n", card, snd_strerror(err));
+		return err;
+	}
+	if (level & LEVEL_ID) {
+		snd_hctl_elem_get_id(elem, id);
+		show_control_id(id);
+		printf("\n");
+	}
+	count = snd_ctl_elem_info_get_count(info);
+	type = snd_ctl_elem_info_get_type(info);
+	printf("%s; type=%s,access=%s,values=%i", space, control_type(info), control_access(info), count);
+	switch (type) {
+	case SND_CTL_ELEM_TYPE_INTEGER:
+		printf(",min=%li,max=%li,step=%li\n", 
+		       snd_ctl_elem_info_get_min(info),
+		       snd_ctl_elem_info_get_max(info),
+		       snd_ctl_elem_info_get_step(info));
+		break;
+	case SND_CTL_ELEM_TYPE_INTEGER64:
+		printf(",min=%Li,max=%Li,step=%Li\n", 
+		       snd_ctl_elem_info_get_min64(info),
+		       snd_ctl_elem_info_get_max64(info),
+		       snd_ctl_elem_info_get_step64(info));
+		break;
+	case SND_CTL_ELEM_TYPE_ENUMERATED:
+	{
+		unsigned int items = snd_ctl_elem_info_get_items(info);
+		printf(",items=%u\n", items);
+		for (item = 0; item < items; item++) {
+			snd_ctl_elem_info_set_item(info, item);
+			if ((err = snd_hctl_elem_info(elem, info)) < 0) {
+				error("Control %s element info error: %s\n", card, snd_strerror(err));
+				return err;
+			}
+			printf("%s; Item #%u '%s'\n", space, item, snd_ctl_elem_info_get_item_name(info));
+		}
+		break;
+	}
+	default:
+		printf("\n");
+		break;
+	}
+	if (level & LEVEL_BASIC) {
+		if ((err = snd_hctl_elem_read(elem, control)) < 0) {
+			error("Control %s element read error: %s\n", card, snd_strerror(err));
+			return err;
+		}
+		printf("%s: values=", space);
+		for (idx = 0; idx < count; idx++) {
+			if (idx > 0)
+				printf(",");
+			switch (type) {
+			case SND_CTL_ELEM_TYPE_BOOLEAN:
+				printf("%s", snd_ctl_elem_value_get_boolean(control, idx) ? "on" : "off");
+				break;
+			case SND_CTL_ELEM_TYPE_INTEGER:
+				printf("%li", snd_ctl_elem_value_get_integer(control, idx));
+				break;
+			case SND_CTL_ELEM_TYPE_INTEGER64:
+				printf("%Li", snd_ctl_elem_value_get_integer64(control, idx));
+				break;
+			case SND_CTL_ELEM_TYPE_ENUMERATED:
+				printf("%u", snd_ctl_elem_value_get_enumerated(control, idx));
+				break;
+			case SND_CTL_ELEM_TYPE_BYTES:
+				printf("0x%02x", snd_ctl_elem_value_get_byte(control, idx));
+				break;
+			default:
+				printf("?");
+				break;
+			}
+		}
+		printf("\n");
+	}
+	return 0;
+}
+
+static int controls(int level)
+{
+	int err;
+	snd_hctl_t *handle;
+	snd_hctl_elem_t *elem;
+	snd_ctl_elem_id_t *id;
+	snd_ctl_elem_info_t *info;
+	snd_ctl_elem_id_alloca(&id);
+	snd_ctl_elem_info_alloca(&info);
+	
+	if ((err = snd_hctl_open(&handle, card, 0)) < 0) {
+		error("Control %s open error: %s", card, snd_strerror(err));
+		return err;
+	}
+	if ((err = snd_hctl_load(handle)) < 0) {
+		error("Control %s local error: %s\n", card, snd_strerror(err));
+		return err;
+	}
+	for (elem = snd_hctl_first_elem(handle); elem; elem = snd_hctl_elem_next(elem)) {
+		if ((err = snd_hctl_elem_info(elem, info)) < 0) {
+			error("Control %s snd_hctl_elem_info error: %s\n", card, snd_strerror(err));
+			return err;
+		}
+		if (!(level & LEVEL_INACTIVE) && snd_ctl_elem_info_is_inactive(info))
+			continue;
+		snd_hctl_elem_get_id(elem, id);
+		show_control_id(id);
+		printf("\n");
+		if (level & LEVEL_BASIC)
+			show_control("  ", elem, 1);
+	}
+	snd_hctl_close(handle);
+	return 0;
+}
+
+static int show_selem(snd_mixer_t *handle, snd_mixer_selem_id_t *id, const char *space, int level)
+{
+	snd_mixer_selem_channel_id_t chn;
+	long pmin = 0, pmax = 0;
+	long cmin = 0, cmax = 0;
+	long pvol, cvol;
+	int psw, csw;
+	int pmono, cmono, mono_ok = 0;
+	snd_mixer_elem_t *elem;
+	
+	elem = snd_mixer_find_selem(handle, id);
+	if (!elem) {
+		error("Mixer %s simple element not found", card);
+		return -ENOENT;
+	}
+
+	if (level & LEVEL_BASIC) {
+		printf("%sCapabilities:", space);
+		if (snd_mixer_selem_has_common_volume(elem)) {
+			printf(" volume");
+			if (snd_mixer_selem_has_playback_volume_joined(elem))
+				printf(" volume-joined");
+		} else {
+			if (snd_mixer_selem_has_playback_volume(elem)) {
+				printf(" pvolume");
+				if (snd_mixer_selem_has_playback_volume_joined(elem))
+					printf(" pvolume-joined");
+			}
+			if (snd_mixer_selem_has_capture_volume(elem)) {
+				printf(" cvolume");
+				if (snd_mixer_selem_has_capture_volume_joined(elem))
+					printf(" cvolume-joined");
+			}
+		}
+		if (snd_mixer_selem_has_common_switch(elem)) {
+			printf(" switch");
+			if (snd_mixer_selem_has_playback_switch_joined(elem))
+				printf(" switch-joined");
+		} else {
+			if (snd_mixer_selem_has_playback_switch(elem)) {
+				printf(" pswitch");
+				if (snd_mixer_selem_has_playback_switch_joined(elem))
+					printf(" pswitch-joined");
+			}
+			if (snd_mixer_selem_has_capture_switch(elem)) {
+				printf(" cswitch");
+				if (snd_mixer_selem_has_capture_switch_joined(elem))
+					printf(" cswitch-joined");
+				if (snd_mixer_selem_has_capture_switch_exclusive(elem))
+					printf(" cswitch-exclusive");
+			}
+		}
+		printf("\n");
+		if (snd_mixer_selem_has_capture_switch_exclusive(elem))
+			printf("%sCapture exclusive group: %i\n", space,
+			       snd_mixer_selem_get_capture_group(elem));
+		if (snd_mixer_selem_has_playback_volume(elem) ||
+		    snd_mixer_selem_has_playback_switch(elem)) {
+			printf("%sPlayback channels:", space);
+			if (snd_mixer_selem_is_playback_mono(elem)) {
+				printf(" Mono");
+			} else {
+				int first = 1;
+				for (chn = 0; chn <= SND_MIXER_SCHN_LAST; chn++){
+					if (!snd_mixer_selem_has_playback_channel(elem, chn))
+						continue;
+					if (!first)
+						printf(" -");
+					printf(" %s", snd_mixer_selem_channel_name(chn));
+					first = 0;
+				}
+			}
+			printf("\n");
+		}
+		if (snd_mixer_selem_has_capture_volume(elem) ||
+		    snd_mixer_selem_has_capture_switch(elem)) {
+			printf("%sCapture channels:", space);
+			if (snd_mixer_selem_is_capture_mono(elem)) {
+				printf(" Mono");
+			} else {
+				int first = 1;
+				for (chn = 0; chn <= SND_MIXER_SCHN_LAST; chn++){
+					if (!snd_mixer_selem_has_capture_channel(elem, chn))
+						continue;
+					if (!first)
+						printf(" -");
+					printf(" %s", snd_mixer_selem_channel_name(chn));
+					first = 0;
+				}
+			}
+			printf("\n");
+		}
+		if (snd_mixer_selem_has_playback_volume(elem) ||
+		    snd_mixer_selem_has_capture_volume(elem)) {
+			printf("%sLimits:", space);
+			if (snd_mixer_selem_has_common_volume(elem)) {
+				snd_mixer_selem_get_playback_volume_range(elem, &pmin, &pmax);
+				snd_mixer_selem_get_capture_volume_range(elem, &cmin, &cmax);
+				printf(" %li - %li", pmin, pmax);
+			} else {
+				if (snd_mixer_selem_has_playback_volume(elem)) {
+					snd_mixer_selem_get_playback_volume_range(elem, &pmin, &pmax);
+					printf(" Playback %li - %li", pmin, pmax);
+				}
+				if (snd_mixer_selem_has_capture_volume(elem)) {
+					snd_mixer_selem_get_capture_volume_range(elem, &cmin, &cmax);
+					printf(" Capture %li - %li", cmin, cmax);
+				}
+			}
+			printf("\n");
+		}
+		pmono = snd_mixer_selem_has_playback_channel(elem, SND_MIXER_SCHN_MONO) &&
+		        (snd_mixer_selem_is_playback_mono(elem) || 
+			 (!snd_mixer_selem_has_playback_volume(elem) &&
+			  !snd_mixer_selem_has_playback_switch(elem)));
+		cmono = snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_MONO) &&
+		        (snd_mixer_selem_is_capture_mono(elem) || 
+			 (!snd_mixer_selem_has_capture_volume(elem) &&
+			  !snd_mixer_selem_has_capture_switch(elem)));
+#if 0
+		printf("pmono = %i, cmono = %i (%i, %i, %i, %i)\n", pmono, cmono,
+				snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_MONO),
+				snd_mixer_selem_is_capture_mono(elem),
+				snd_mixer_selem_has_capture_volume(elem),
+				snd_mixer_selem_has_capture_switch(elem));
+#endif
+		if (pmono || cmono) {
+			if (!mono_ok) {
+				printf("%s%s:", space, "Mono");
+				mono_ok = 1;
+			}
+			if (snd_mixer_selem_has_common_volume(elem)) {
+				snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_MONO, &pvol);
+				printf(" %s", get_percent(pvol, pmin, pmax));
+			}
+			if (snd_mixer_selem_has_common_switch(elem)) {
+				snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_MONO, &psw);
+				printf(" [%s]", psw ? "on" : "off");
+			}
+		}
+		if (pmono && snd_mixer_selem_has_playback_channel(elem, SND_MIXER_SCHN_MONO)) {
+			int title = 0;
+			if (!mono_ok) {
+				printf("%s%s:", space, "Mono");
+				mono_ok = 1;
+			}
+			if (!snd_mixer_selem_has_common_volume(elem)) {
+				if (snd_mixer_selem_has_playback_volume(elem)) {
+					printf(" Playback");
+					title = 1;
+					snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_MONO, &pvol);
+					printf(" %s", get_percent(pvol, pmin, pmax));
+				}
+			}
+			if (!snd_mixer_selem_has_common_switch(elem)) {
+				if (snd_mixer_selem_has_playback_switch(elem)) {
+					if (!title)
+						printf(" Playback");
+					snd_mixer_selem_get_playback_switch(elem, SND_MIXER_SCHN_MONO, &psw);
+					printf(" [%s]", psw ? "on" : "off");
+				}
+			}
+		}
+		if (cmono && snd_mixer_selem_has_capture_channel(elem, SND_MIXER_SCHN_MONO)) {
+			int title = 0;
+			if (!mono_ok) {
+				printf("%s%s:", space, "Mono");
+				mono_ok = 1;
+			}
+			if (!snd_mixer_selem_has_common_volume(elem)) {
+				if (snd_mixer_selem_has_capture_volume(elem)) {
+					printf(" Capture");
+					title = 1;
+					snd_mixer_selem_get_capture_volume(elem, SND_MIXER_SCHN_MONO, &cvol);
+					printf(" %s", get_percent(cvol, cmin, cmax));
+				}
+			}
+			if (!snd_mixer_selem_has_common_switch(elem)) {
+				if (snd_mixer_selem_has_capture_switch(elem)) {
+					if (!title)
+						printf(" Capture");
+					snd_mixer_selem_get_capture_switch(elem, SND_MIXER_SCHN_MONO, &csw);
+					printf(" [%s]", csw ? "on" : "off");
+				}
+			}
+		}
+		if (pmono || cmono)
+			printf("\n");
+		if (!pmono || !cmono) {
+			for (chn = 0; chn <= SND_MIXER_SCHN_LAST; chn++) {
+				if ((pmono || !snd_mixer_selem_has_playback_channel(elem, chn)) &&
+				    (cmono || !snd_mixer_selem_has_capture_channel(elem, chn)))
+					continue;
+				printf("%s%s:", space, snd_mixer_selem_channel_name(chn));
+				if (!pmono && !cmono && snd_mixer_selem_has_common_volume(elem)) {
+					snd_mixer_selem_get_playback_volume(elem, chn, &pvol);
+					printf(" %s", get_percent(pvol, pmin, pmax));
+				}
+				if (!pmono && !cmono && snd_mixer_selem_has_common_switch(elem)) {
+					snd_mixer_selem_get_playback_switch(elem, chn, &psw);
+					printf(" [%s]", psw ? "on" : "off");
+				}
+				if (!pmono && snd_mixer_selem_has_playback_channel(elem, chn)) {
+					int title = 0;
+					if (!snd_mixer_selem_has_common_volume(elem)) {
+						if (snd_mixer_selem_has_playback_volume(elem)) {
+							printf(" Playback");
+							title = 1;
+							snd_mixer_selem_get_playback_volume(elem, chn, &pvol);
+							printf(" %s", get_percent(pvol, pmin, pmax));
+						}
+					}
+					if (!snd_mixer_selem_has_common_switch(elem)) {
+						if (snd_mixer_selem_has_playback_switch(elem)) {
+							if (!title)
+								printf(" Playback");
+							snd_mixer_selem_get_playback_switch(elem, chn, &psw);
+							printf(" [%s]", psw ? "on" : "off");
+						}
+					}
+				}
+				if (!cmono && snd_mixer_selem_has_capture_channel(elem, chn)) {
+					int title = 0;
+					if (!snd_mixer_selem_has_common_volume(elem)) {
+						if (snd_mixer_selem_has_capture_volume(elem)) {
+							printf(" Capture");
+							title = 1;
+							snd_mixer_selem_get_capture_volume(elem, chn, &cvol);
+							printf(" %s", get_percent(cvol, cmin, cmax));
+						}
+					}
+					if (!snd_mixer_selem_has_common_switch(elem)) {
+						if (snd_mixer_selem_has_capture_switch(elem)) {
+							if (!title)
+								printf(" Capture");
+							snd_mixer_selem_get_capture_switch(elem, chn, &csw);
+							printf(" [%s]", csw ? "on" : "off");
+						}
+					}
+				}
+				printf("\n");
+			}
+		}
+	}
+	return 0;
+}
+
+static int selems(int level)
+{
+	int err;
+	snd_mixer_t *handle;
+	snd_mixer_selem_id_t *sid;
+	snd_mixer_elem_t *elem;
+	snd_mixer_selem_id_alloca(&sid);
+	
+	if ((err = snd_mixer_open(&handle, 0)) < 0) {
+		error("Mixer %s open error: %s", card, snd_strerror(err));
+		return err;
+	}
+	if ((err = snd_mixer_attach(handle, card)) < 0) {
+		error("Mixer attach %s error: %s", card, snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	if ((err = snd_mixer_selem_register(handle, NULL, NULL)) < 0) {
+		error("Mixer register error: %s", snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	err = snd_mixer_load(handle);
+	if (err < 0) {
+		error("Mixer load error: %s", card, snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	for (elem = snd_mixer_first_elem(handle); elem; elem = snd_mixer_elem_next(elem)) {
+		snd_mixer_selem_get_id(elem, sid);
+		if (!(level & LEVEL_INACTIVE) && !snd_mixer_selem_is_active(elem))
+			continue;
+		printf("Simple mixer control '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+		show_selem(handle, sid, "  ", level);
+	}
+	snd_mixer_close(handle);
+	return 0;
+}
+
+static int parse_control_id(const char *str, snd_ctl_elem_id_t *id)
+{
+	int c, size;
+	char *ptr;
+
+	while (*str == ' ' || *str == '\t')
+		str++;
+	if (!(*str))
+		return -EINVAL;
+	snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);	/* default */
+	while (*str) {
+		if (!strncasecmp(str, "numid=", 6)) {
+			str += 6;
+			snd_ctl_elem_id_set_numid(id, atoi(str));
+			while (isdigit(*str))
+				str++;
+		} else if (!strncasecmp(str, "iface=", 6)) {
+			str += 6;
+			if (!strncasecmp(str, "card", 4)) {
+				snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_CARD);
+				str += 4;
+			} else if (!strncasecmp(str, "mixer", 5)) {
+				snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
+				str += 5;
+			} else if (!strncasecmp(str, "pcm", 3)) {
+				snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
+				str += 3;
+			} else if (!strncasecmp(str, "rawmidi", 7)) {
+				snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_RAWMIDI);
+				str += 7;
+			} else if (!strncasecmp(str, "timer", 5)) {
+				snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_TIMER);
+				str += 5;
+			} else if (!strncasecmp(str, "sequencer", 9)) {
+				snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_SEQUENCER);
+				str += 9;
+			} else {
+				return -EINVAL;
+			}
+		} else if (!strncasecmp(str, "name=", 5)) {
+			char buf[64];
+			str += 5;
+			ptr = buf;
+			size = 0;
+			if (*str == '\'' || *str == '\"') {
+				c = *str++;
+				while (*str && *str != c) {
+					if (size < (int)sizeof(buf)) {
+						*ptr++ = *str;
+						size++;
+					}
+					str++;
+				}
+				if (*str == c)
+					str++;
+			} else {
+				while (*str && *str != ',') {
+					if (size < (int)sizeof(buf)) {
+						*ptr++ = *str;
+						size++;
+					}
+					str++;
+				}
+				*ptr = '\0';
+			}
+			snd_ctl_elem_id_set_name(id, buf);
+		} else if (!strncasecmp(str, "index=", 6)) {
+			str += 6;
+			snd_ctl_elem_id_set_index(id, atoi(str));
+			while (isdigit(*str))
+				str++;
+		} else if (!strncasecmp(str, "device=", 7)) {
+			str += 7;
+			snd_ctl_elem_id_set_device(id, atoi(str));
+			while (isdigit(*str))
+				str++;
+		} else if (!strncasecmp(str, "subdevice=", 10)) {
+			str += 10;
+			snd_ctl_elem_id_set_subdevice(id, atoi(str));
+			while (isdigit(*str))
+				str++;
+		}
+		if (*str == ',') {
+			str++;
+		} else {
+			if (*str)
+				return -EINVAL;
+		}
+	}			
+	return 0;
+}
+
+static int parse_simple_id(const char *str, snd_mixer_selem_id_t *sid)
+{
+	int c, size;
+	char buf[128];
+	char *ptr = buf;
+
+	while (*str == ' ' || *str == '\t')
+		str++;
+	if (!(*str))
+		return -EINVAL;
+	size = 1;	/* for '\0' */
+	if (*str != '"' && *str != '\'') {
+		while (*str && *str != ',') {
+			if (size < (int)sizeof(buf)) {
+				*ptr++ = *str;
+				size++;
+			}
+			str++;
+		}
+	} else {
+		c = *str++;
+		while (*str && *str != c) {
+			if (size < (int)sizeof(buf)) {
+				*ptr++ = *str;
+				size++;
+			}
+			str++;
+		}
+		if (*str == c)
+			str++;
+	}
+	if (*str == '\0') {
+		snd_mixer_selem_id_set_index(sid, 0);
+		*ptr = 0;
+		goto _set;
+	}
+	if (*str != ',')
+		return -EINVAL;
+	*ptr = 0;	/* terminate the string */
+	str++;
+	if (!isdigit(*str))
+		return -EINVAL;
+	snd_mixer_selem_id_set_index(sid, atoi(str));
+       _set:
+	snd_mixer_selem_id_set_name(sid, buf);
+	return 0;
+}
+
+static int cset(int argc, char *argv[], int roflag)
+{
+	int err;
+	snd_ctl_t *handle;
+	snd_ctl_elem_info_t *info;
+	snd_ctl_elem_id_t *id;
+	snd_ctl_elem_value_t *control;
+	char *ptr;
+	unsigned int idx, count;
+	long tmp;
+	snd_ctl_elem_type_t type;
+	snd_ctl_elem_info_alloca(&info);
+	snd_ctl_elem_id_alloca(&id);
+	snd_ctl_elem_value_alloca(&control);
+
+	if (argc < 1) {
+		fprintf(stderr, "Specify a full control identifier: [[iface=<iface>,][name='name',][index=<index>,][device=<device>,][subdevice=<subdevice>]]|[numid=<numid>]\n");
+		return -EINVAL;
+	}
+	if (parse_control_id(argv[0], id)) {
+		fprintf(stderr, "Wrong control identifier: %s\n", argv[0]);
+		return -EINVAL;
+	}
+	if (debugflag) {
+		printf("VERIFY ID: ");
+		show_control_id(id);
+		printf("\n");
+	}
+	if ((err = snd_ctl_open(&handle, card, 0)) < 0) {
+		error("Control %s open error: %s\n", card, snd_strerror(err));
+		return err;
+	}
+	snd_ctl_elem_info_set_id(info, id);
+	if ((err = snd_ctl_elem_info(handle, info)) < 0) {
+		error("Control %s cinfo error: %s\n", card, snd_strerror(err));
+		return err;
+	}
+	snd_ctl_elem_info_get_id(info, id);	/* FIXME: Remove it when hctl find works ok !!! */
+	type = snd_ctl_elem_info_get_type(info);
+	count = snd_ctl_elem_info_get_count(info);
+	snd_ctl_elem_value_set_id(control, id);
+	
+	if (!roflag) {
+		ptr = argv[1];
+		for (idx = 0; idx < count && idx < 128 && ptr && *ptr; idx++) {
+			switch (type) {
+			case SND_CTL_ELEM_TYPE_BOOLEAN:
+				tmp = 0;
+				if (!strncasecmp(ptr, "on", 2) || !strncasecmp(ptr, "up", 2)) {
+					tmp = 1;
+					ptr += 2;
+				} else if (!strncasecmp(ptr, "yes", 3)) {
+					tmp = 1;
+					ptr += 3;
+				} else if (!strncasecmp(ptr, "toggle", 6)) {
+					tmp = snd_ctl_elem_value_get_boolean(control, idx);
+					tmp = tmp > 0 ? 0 : 1;
+					ptr += 6;
+				} else if (isdigit(*ptr)) {
+					tmp = atoi(ptr) > 0 ? 1 : 0;
+					while (isdigit(*ptr))
+						ptr++;
+				} else {
+					while (*ptr && *ptr != ',')
+						ptr++;
+				}
+				snd_ctl_elem_value_set_boolean(control, idx, tmp);
+				break;
+			case SND_CTL_ELEM_TYPE_INTEGER:
+				tmp = get_integer(&ptr,
+						  snd_ctl_elem_info_get_min(info),
+						  snd_ctl_elem_info_get_max(info));
+				snd_ctl_elem_value_set_integer(control, idx, tmp);
+				break;
+			case SND_CTL_ELEM_TYPE_INTEGER64:
+				tmp = get_integer64(&ptr,
+						  snd_ctl_elem_info_get_min64(info),
+						  snd_ctl_elem_info_get_max64(info));
+				snd_ctl_elem_value_set_integer64(control, idx, tmp);
+				break;
+			case SND_CTL_ELEM_TYPE_ENUMERATED:
+				tmp = get_integer(&ptr, 0, snd_ctl_elem_info_get_items(info) - 1);
+				snd_ctl_elem_value_set_enumerated(control, idx, tmp);
+				break;
+			case SND_CTL_ELEM_TYPE_BYTES:
+				tmp = get_integer(&ptr, 0, 255);
+				snd_ctl_elem_value_set_byte(control, idx, tmp);
+				break;
+			default:
+				break;
+			}
+			if (!strchr(argv[1], ','))
+				ptr = argv[1];
+			else if (*ptr == ',')
+				ptr++;
+		}
+		if ((err = snd_ctl_elem_write(handle, control)) < 0) {
+			error("Control %s element write error: %s\n", card, snd_strerror(err));
+			return err;
+		}
+	}
+	snd_ctl_close(handle);
+	if (!quiet) {
+		snd_hctl_t *hctl;
+		snd_hctl_elem_t *elem;
+		if ((err = snd_hctl_open(&hctl, card, 0)) < 0) {
+			error("Control %s open error: %s\n", card, snd_strerror(err));
+			return err;
+		}
+		if ((err = snd_hctl_load(hctl)) < 0) {
+			error("Control %s load error: %s\n", card, snd_strerror(err));
+			return err;
+		}
+		elem = snd_hctl_find_elem(hctl, id);
+		if (elem)
+			show_control("  ", elem, LEVEL_BASIC | LEVEL_ID);
+		else
+			printf("Could not find the specified element\n");
+		snd_hctl_close(hctl);
+	}
+	return 0;
+}
+
+typedef struct channel_mask {
+	char *name;
+	unsigned int mask;
+} channel_mask_t;
+static channel_mask_t chanmask[] = {
+	{"frontleft", 1 << SND_MIXER_SCHN_FRONT_LEFT},
+	{"frontright", 1 << SND_MIXER_SCHN_FRONT_RIGHT},
+	{"frontcenter", 1 << SND_MIXER_SCHN_FRONT_CENTER},
+	{"front", ((1 << SND_MIXER_SCHN_FRONT_LEFT) |
+		   (1 << SND_MIXER_SCHN_FRONT_RIGHT))},
+	{"center", 1 << SND_MIXER_SCHN_FRONT_CENTER},
+	{"rearleft", 1 << SND_MIXER_SCHN_REAR_LEFT},
+	{"rearright", 1 << SND_MIXER_SCHN_REAR_RIGHT},
+	{"rear", ((1 << SND_MIXER_SCHN_REAR_LEFT) |
+		  (1 << SND_MIXER_SCHN_REAR_RIGHT))},
+	{"woofer", 1 << SND_MIXER_SCHN_WOOFER},
+	{NULL, 0}
+};
+
+static unsigned int channels_mask(char **arg, unsigned int def)
+{
+	channel_mask_t *c;
+
+	for (c = chanmask; c->name; c++) {
+		if (strncasecmp(*arg, c->name, strlen(c->name)) == 0) {
+			while (**arg != '\0' && **arg != ',' && **arg != ' ' && **arg != '\t')
+				(*arg)++;
+			if (**arg == ',' || **arg == ' ' || **arg == '\t')
+				(*arg)++;
+			return c->mask;
+		}
+	}
+	return def;
+}
+
+static unsigned int dir_mask(char **arg, unsigned int def)
+{
+	int findend = 0;
+
+	if (strncasecmp(*arg, "playback", 8) == 0)
+		def = findend = 1;
+	else if (strncasecmp(*arg, "capture", 8) == 0)
+		def = findend = 2;
+	if (findend) {
+		while (**arg != '\0' && **arg != ',' && **arg != ' ' && **arg != '\t')
+			(*arg)++;
+		if (**arg == ',' || **arg == ' ' || **arg == '\t')
+			(*arg)++;
+	}
+	return def;
+}
+
+static int sset(unsigned int argc, char *argv[], int roflag)
+{
+	int err;
+	unsigned int idx;
+	snd_mixer_selem_channel_id_t chn;
+	unsigned int channels = ~0UL;
+	unsigned int dir = 3;
+	long pmin, pmax, cmin, cmax;
+	snd_mixer_t *handle;
+	snd_mixer_elem_t *elem;
+	snd_mixer_selem_id_t *sid;
+	snd_mixer_selem_id_alloca(&sid);
+
+	if (argc < 1) {
+		fprintf(stderr, "Specify a scontrol identifier: 'name',index\n");
+		return 1;
+	}
+	if (parse_simple_id(argv[0], sid)) {
+		fprintf(stderr, "Wrong scontrol identifier: %s\n", argv[0]);
+		return 1;
+	}
+	if (!roflag && argc < 2) {
+		fprintf(stderr, "Specify what you want to set...\n");
+		return 1;
+	}
+	if ((err = snd_mixer_open(&handle, 0)) < 0) {
+		error("Mixer %s open error: %s\n", card, snd_strerror(err));
+		return err;
+	}
+	if ((err = snd_mixer_attach(handle, card)) < 0) {
+		error("Mixer attach %s error: %s", card, snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	if ((err = snd_mixer_selem_register(handle, NULL, NULL)) < 0) {
+		error("Mixer register error: %s", snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	err = snd_mixer_load(handle);
+	if (err < 0) {
+		error("Mixer load error: %s", card, snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	elem = snd_mixer_find_selem(handle, sid);
+	if (!elem) {
+		error("Unable to find simple control '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+		snd_mixer_close(handle);
+		return -ENOENT;
+	}
+	if (roflag)
+		goto __skip_write;
+	snd_mixer_selem_get_playback_volume_range(elem, &pmin, &pmax);
+	snd_mixer_selem_get_capture_volume_range(elem, &cmin, &cmax);
+	for (idx = 1; idx < argc; idx++) {
+		char *ptr = argv[idx], *optr;
+		int multi, firstchn = 1;
+		channels = channels_mask(&ptr, channels);
+		if (*ptr == '\0')
+			continue;
+		dir = dir_mask(&ptr, dir);
+		if (*ptr == '\0')
+			continue;
+		multi = (strchr(ptr, ',') != NULL);
+		optr = ptr;
+		for (chn = 0; chn <= SND_MIXER_SCHN_LAST; chn++) {
+			char *sptr = NULL;
+			int ival;
+			long lval;
+
+			if (!(channels & (1 << chn)))
+				continue;
+			if ((dir & 1) && snd_mixer_selem_has_playback_channel(elem, chn)) {
+				sptr = ptr;
+				if (!strncmp(ptr, "mute", 4) && snd_mixer_selem_has_playback_switch(elem)) {
+					snd_mixer_selem_get_playback_switch(elem, chn, &ival);
+					snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "mute", 1, ival));
+				} else if (!strncmp(ptr, "off", 3) && snd_mixer_selem_has_playback_switch(elem)) {
+					snd_mixer_selem_get_playback_switch(elem, chn, &ival);
+					snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "off", 1, ival));
+				} else if (!strncmp(ptr, "unmute", 6) && snd_mixer_selem_has_playback_switch(elem)) {
+					snd_mixer_selem_get_playback_switch(elem, chn, &ival);
+					snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "unmute", 0, ival));
+				} else if (!strncmp(ptr, "on", 2) && snd_mixer_selem_has_playback_switch(elem)) {
+					snd_mixer_selem_get_playback_switch(elem, chn, &ival);
+					snd_mixer_selem_set_playback_switch(elem, chn, get_bool_simple(&ptr, "on", 0, ival));
+				} else if (!strncmp(ptr, "toggle", 6) && snd_mixer_selem_has_playback_switch(elem)) {
+					if (firstchn || !snd_mixer_selem_has_playback_switch_joined(elem)) {
+						snd_mixer_selem_get_playback_switch(elem, chn, &ival);
+						snd_mixer_selem_set_playback_switch(elem, chn, (ival ? 1 : 0) ^ 1);
+					}
+					simple_skip_word(&ptr, "toggle");
+				} else if (isdigit(*ptr) || *ptr == '-' || *ptr == '+') {
+					if (snd_mixer_selem_has_playback_volume(elem)) {
+						snd_mixer_selem_get_playback_volume(elem, chn, &lval);
+						snd_mixer_selem_set_playback_volume(elem, chn, get_volume_simple(&ptr, pmin, pmax, lval));
+					} else {
+						get_volume_simple(&ptr, 0, 100, 0);
+					}
+				} else if (simple_skip_word(&ptr, "cap") || simple_skip_word(&ptr, "rec") ||
+					   simple_skip_word(&ptr, "nocap") || simple_skip_word(&ptr, "norec")) {
+					/* nothing */
+				} else {
+					error("Unknown playback setup '%s'..\n", ptr);
+					snd_mixer_close(handle);
+					return err;
+				}
+			}
+			if ((dir & 2) && snd_mixer_selem_has_capture_channel(elem, chn)) {
+				if (sptr != NULL)
+					ptr = sptr;
+				sptr = ptr;
+				if (!strncmp(ptr, "cap", 3) && snd_mixer_selem_has_capture_switch(elem)) {
+					snd_mixer_selem_get_capture_switch(elem, chn, &ival);
+					snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "cap", 0, ival));
+				} else if (!strncmp(ptr, "rec", 3) && snd_mixer_selem_has_capture_switch(elem)) {
+					snd_mixer_selem_get_capture_switch(elem, chn, &ival);
+					snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "rec", 0, ival));
+				} else if (!strncmp(ptr, "nocap", 5) && snd_mixer_selem_has_capture_switch(elem)) {
+					snd_mixer_selem_get_capture_switch(elem, chn, &ival);
+					snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "nocap", 1, ival));
+				} else if (!strncmp(ptr, "norec", 5) && snd_mixer_selem_has_capture_switch(elem)) {
+					snd_mixer_selem_get_capture_switch(elem, chn, &ival);
+					snd_mixer_selem_set_capture_switch(elem, chn, get_bool_simple(&ptr, "norec", 1, ival));
+				} else if (!strncmp(ptr, "toggle", 6) && snd_mixer_selem_has_capture_switch(elem)) {
+					if (firstchn || !snd_mixer_selem_has_capture_switch_joined(elem)) {
+						snd_mixer_selem_get_capture_switch(elem, chn, &ival);
+						snd_mixer_selem_set_capture_switch(elem, chn, (ival ? 1 : 0) ^ 1);
+					}
+					simple_skip_word(&ptr, "toggle");
+				} else if (isdigit(*ptr) || *ptr == '-' || *ptr == '+') {
+					if (snd_mixer_selem_has_capture_volume(elem)) {
+						snd_mixer_selem_get_capture_volume(elem, chn, &lval);
+						snd_mixer_selem_set_capture_volume(elem, chn, get_volume_simple(&ptr, cmin, cmax, lval));
+					} else {
+						get_volume_simple(&ptr, 0, 100, 0);
+					}
+				} else if (simple_skip_word(&ptr, "mute") || simple_skip_word(&ptr, "off") ||
+					   simple_skip_word(&ptr, "unmute") || simple_skip_word(&ptr, "on")) {
+					/* nothing */
+				} else {
+					error("Unknown capture setup '%s'..\n", ptr);
+					snd_mixer_close(handle);
+					return err;
+				}
+			}
+			if (!multi)
+				ptr = optr;
+			firstchn = 0;
+		}
+	} 
+      __skip_write:
+	if (!quiet) {
+		printf("Simple mixer control '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+		show_selem(handle, sid, "  ", 1);
+	}
+	snd_mixer_close(handle);
+	return 0;
+}
+
+static void events_info(snd_hctl_elem_t *helem)
+{
+	snd_ctl_elem_id_t *id;
+	snd_ctl_elem_id_alloca(&id);
+	snd_hctl_elem_get_id(helem, id);
+	printf("event info: ");
+	show_control_id(id);
+	printf("\n");
+}
+
+static void events_value(snd_hctl_elem_t *helem)
+{
+	snd_ctl_elem_id_t *id;
+	snd_ctl_elem_id_alloca(&id);
+	snd_hctl_elem_get_id(helem, id);
+	printf("event value: ");
+	show_control_id(id);
+	printf("\n");
+}
+
+static void events_remove(snd_hctl_elem_t *helem)
+{
+	snd_ctl_elem_id_t *id;
+	snd_ctl_elem_id_alloca(&id);
+	snd_hctl_elem_get_id(helem, id);
+	printf("event remove: ");
+	show_control_id(id);
+	printf("\n");
+}
+
+int element_callback(snd_hctl_elem_t *elem, unsigned int mask)
+{
+	if (mask == SND_CTL_EVENT_MASK_REMOVE) {
+		events_remove(elem);
+		return 0;
+	}
+	if (mask & SND_CTL_EVENT_MASK_INFO) 
+		events_info(elem);
+	if (mask & SND_CTL_EVENT_MASK_VALUE) 
+		events_value(elem);
+	return 0;
+}
+
+static void events_add(snd_hctl_elem_t *helem)
+{
+	snd_ctl_elem_id_t *id;
+	snd_ctl_elem_id_alloca(&id);
+	snd_hctl_elem_get_id(helem, id);
+	printf("event add: ");
+	show_control_id(id);
+	printf("\n");
+	snd_hctl_elem_set_callback(helem, element_callback);
+}
+
+int ctl_callback(snd_hctl_t *ctl, unsigned int mask,
+		 snd_hctl_elem_t *elem)
+{
+	if (mask & SND_CTL_EVENT_MASK_ADD)
+		events_add(elem);
+	return 0;
+}
+
+static int events(int argc ATTRIBUTE_UNUSED, char *argv[] ATTRIBUTE_UNUSED)
+{
+	snd_hctl_t *handle;
+	snd_hctl_elem_t *helem;
+	int err;
+
+	if ((err = snd_hctl_open(&handle, card, 0)) < 0) {
+		error("Control %s open error: %s\n", card, snd_strerror(err));
+		return err;
+	}
+	snd_hctl_set_callback(handle, ctl_callback);
+	if ((err = snd_hctl_load(handle)) < 0) {
+		error("Control %s hbuild error: %s\n", card, snd_strerror(err));
+		return err;
+	}
+	for (helem = snd_hctl_first_elem(handle); helem; helem = snd_hctl_elem_next(helem)) {
+		snd_hctl_elem_set_callback(helem, element_callback);
+	}
+	printf("Ready to listen...\n");
+	while (1) {
+		int res = snd_hctl_wait(handle, -1);
+		if (res >= 0) {
+			printf("Poll ok: %i\n", res);
+			res = snd_hctl_handle_events(handle);
+			assert(res > 0);
+		}
+	}
+	snd_hctl_close(handle);
+}
+
+static void sevents_value(snd_mixer_selem_id_t *sid)
+{
+	printf("event value: '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+}
+
+static void sevents_info(snd_mixer_selem_id_t *sid)
+{
+	printf("event info: '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+}
+
+static void sevents_remove(snd_mixer_selem_id_t *sid)
+{
+	printf("event remove: '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+}
+
+int melem_event(snd_mixer_elem_t *elem, unsigned int mask)
+{
+	snd_mixer_selem_id_t *sid;
+	snd_mixer_selem_id_alloca(&sid);
+	snd_mixer_selem_get_id(elem, sid);
+	if (mask == SND_CTL_EVENT_MASK_REMOVE) {
+		sevents_remove(sid);
+		return 0;
+	}
+	if (mask & SND_CTL_EVENT_MASK_INFO) 
+		sevents_info(sid);
+	if (mask & SND_CTL_EVENT_MASK_VALUE) 
+		sevents_value(sid);
+	return 0;
+}
+
+static void sevents_add(snd_mixer_elem_t *elem)
+{
+	snd_mixer_selem_id_t *sid;
+	snd_mixer_selem_id_alloca(&sid);
+	snd_mixer_selem_get_id(elem, sid);
+	printf("event add: '%s',%i\n", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+	snd_mixer_elem_set_callback(elem, melem_event);
+}
+
+int mixer_event(snd_mixer_t *mixer, unsigned int mask,
+		snd_mixer_elem_t *elem)
+{
+	if (mask & SND_CTL_EVENT_MASK_ADD)
+		sevents_add(elem);
+	return 0;
+}
+
+static int sevents(int argc ATTRIBUTE_UNUSED, char *argv[] ATTRIBUTE_UNUSED)
+{
+	snd_mixer_t *handle;
+	int err;
+
+	if ((err = snd_mixer_open(&handle, 0)) < 0) {
+		error("Mixer %s open error: %s", card, snd_strerror(err));
+		return err;
+	}
+	if ((err = snd_mixer_attach(handle, card)) < 0) {
+		error("Mixer attach %s error: %s", card, snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	if ((err = snd_mixer_selem_register(handle, NULL, NULL)) < 0) {
+		error("Mixer register error: %s", snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+	snd_mixer_set_callback(handle, mixer_event);
+	err = snd_mixer_load(handle);
+	if (err < 0) {
+		error("Mixer load error: %s", card, snd_strerror(err));
+		snd_mixer_close(handle);
+		return err;
+	}
+
+	printf("Ready to listen...\n");
+	while (1) {
+		int res;
+		res = snd_mixer_wait(handle, -1);
+		if (res >= 0) {
+			printf("Poll ok: %i\n", res);
+			res = snd_mixer_handle_events(handle);
+			assert(res >= 0);
+		}
+	}
+	snd_mixer_close(handle);
+}
+
+int main(int argc, char *argv[])
+{
+	int morehelp, level = 0;
+	struct option long_option[] =
+	{
+		{"help", 0, NULL, HELPID_HELP},
+		{"card", 1, NULL, HELPID_CARD},
+		{"device", 1, NULL, HELPID_DEVICE},
+		{"quiet", 0, NULL, HELPID_QUIET},
+		{"inactive", 0, NULL, HELPID_INACTIVE},
+		{"debug", 0, NULL, HELPID_DEBUG},
+		{"version", 0, NULL, HELPID_VERSION},
+		{NULL, 0, NULL, 0},
+	};
+
+	morehelp = 0;
+	while (1) {
+		int c;
+
+		if ((c = getopt_long(argc, argv, "hc:D:qidv", long_option, NULL)) < 0)
+			break;
+		switch (c) {
+		case 'h':
+		case HELPID_HELP:
+			morehelp++;
+			break;
+		case 'c':
+		case HELPID_CARD:
+			{
+				int i;
+				i = snd_card_get_index(optarg);
+				if (i >= 0 && i < 32)
+					sprintf(card, "hw:%i", i);
+				else {
+					fprintf(stderr, "\07Invalid card number.\n");
+					morehelp++;
+				}
+			}
+			break;
+		case 'D':
+		case HELPID_DEVICE:
+			strcpy(card, optarg);
+			break;
+		case 'q':
+		case HELPID_QUIET:
+			quiet = 1;
+			break;
+		case 'i':
+		case HELPID_INACTIVE:
+			level |= LEVEL_INACTIVE;
+			break;
+		case 'd':
+		case HELPID_DEBUG:
+			debugflag = 1;
+			break;
+		case 'v':
+		case HELPID_VERSION:
+			printf("amixer version " SND_UTIL_VERSION_STR "\n");
+			return 1;
+		default:
+			fprintf(stderr, "\07Invalid switch or option needs an argument.\n");
+			morehelp++;
+		}
+	}
+	if (morehelp) {
+		help();
+		return 1;
+	}
+	if (argc - optind <= 0) {
+		return selems(LEVEL_BASIC | level) ? 1 : 0;
+	}
+	if (!strcmp(argv[optind], "help")) {
+		return help() ? 1 : 0;
+	} else if (!strcmp(argv[optind], "info")) {
+		return info() ? 1 : 0;
+	} else if (!strcmp(argv[optind], "controls")) {
+		return controls(level) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "contents")) {
+		return controls(LEVEL_BASIC | level) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "scontrols") || !strcmp(argv[optind], "simple")) {
+		return selems(level) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "scontents")) {
+		return selems(LEVEL_BASIC | level) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "sset") || !strcmp(argv[optind], "set")) {
+		return sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "sget") || !strcmp(argv[optind], "get")) {
+		return sset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "cset")) {
+		return cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 0) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "cget")) {
+		return cset(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL, 1) ? 1 : 0;
+	} else if (!strcmp(argv[optind], "events")) {
+		return events(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL);
+	} else if (!strcmp(argv[optind], "sevents")) {
+		return sevents(argc - optind - 1, argc - optind > 1 ? argv + optind + 1 : NULL);
+	} else {
+		fprintf(stderr, "amixer: Unknown command '%s'...\n", argv[optind]);
+	}
+
+	return 0;
+}
Index: debian/alsa-utils/amixer/amixer.h
diff -u debian/alsa-utils/amixer/amixer.h:1.3 debian/alsa-utils/amixer/amixer.h:1.4
--- debian/alsa-utils/amixer/amixer.h:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/amixer/amixer.h	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,21 @@
+/*
+ *   ALSA command line mixer utility
+ *   Copyright (c) 1999 by Jaroslav Kysela <perex@suse.cz>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+ *
+ */
+
+#include "../include/version.h"
Index: debian/alsa-utils/aplay/Makefile.am
diff -u debian/alsa-utils/aplay/Makefile.am:1.3 debian/alsa-utils/aplay/Makefile.am:1.4
--- debian/alsa-utils/aplay/Makefile.am:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/aplay/Makefile.am	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,29 @@
+INCLUDES = -I$(top_srcdir)/include
+LDADD = -lasound
+
+# debug flags
+#LDFLAGS = -static
+#LDADD += -ldl
+
+bin_PROGRAMS = aplay
+man_MANS = aplay.1 arecord.1
+noinst_HEADERS = formats.h
+
+EXTRA_DIST = aplay.1 arecord.1
+EXTRA_CLEAN = arecord
+
+arecord: aplay
+	rm -f arecord
+	$(LN_S) $< $@
+
+arecord.1: aplay.1
+	rm -f arecord.1
+	$(LN_S) $< $@
+
+install-exec-hook: arecord
+	rm -f $(DESTDIR)$(bindir)/arecord
+	(cd $(DESTDIR)$(bindir) && $(LN_S) aplay arecord)
+
+install-data-hook:
+	rm -f $(DESTDIR)$(mandir)/man1/arecord.1
+	(cd $(DESTDIR)$(mandir)/man1 && $(LN_S) aplay.1 arecord.1)
Index: debian/alsa-utils/aplay/Makefile.in
diff -u debian/alsa-utils/aplay/Makefile.in:1.3 debian/alsa-utils/aplay/Makefile.in:1.4
--- debian/alsa-utils/aplay/Makefile.in:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/aplay/Makefile.in	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,385 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+INCLUDES = -I$(top_srcdir)/include
+LDADD = -lasound
+
+
+# debug flags
+#LDFLAGS = -static
+#LDADD += -ldl
+bin_PROGRAMS = aplay
+man_MANS = aplay.1 arecord.1
+noinst_HEADERS = formats.h
+
+EXTRA_DIST = aplay.1 arecord.1
+EXTRA_CLEAN = arecord
+subdir = aplay
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = aplay$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+aplay_SOURCES = aplay.c
+aplay_OBJECTS = aplay.$(OBJEXT)
+aplay_LDADD = $(LDADD)
+aplay_DEPENDENCIES =
+aplay_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/aplay.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = aplay.c
+
+NROFF = nroff
+MANS = $(man_MANS)
+HEADERS = $(noinst_HEADERS)
+
+DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in
+SOURCES = aplay.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  aplay/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+aplay$(EXEEXT): $(aplay_OBJECTS) $(aplay_DEPENDENCIES) 
+	@rm -f aplay$(EXEEXT)
+	$(LINK) $(aplay_LDFLAGS) $(aplay_OBJECTS) $(aplay_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/aplay.Po@am__quote@
+
+distclean-depend:
+	-rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+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/^.*\\.//'`; \
+	  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/^.*\\.//'`; \
+	  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
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS) $(HEADERS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+
+install-exec-am: install-binPROGRAMS
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic distclean distclean-compile distclean-depend \
+	distclean-generic distclean-tags distdir dvi dvi-am info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-man1 install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+	uninstall-man1
+
+
+arecord: aplay
+	rm -f arecord
+	$(LN_S) $< $@
+
+arecord.1: aplay.1
+	rm -f arecord.1
+	$(LN_S) $< $@
+
+install-exec-hook: arecord
+	rm -f $(DESTDIR)$(bindir)/arecord
+	(cd $(DESTDIR)$(bindir) && $(LN_S) aplay arecord)
+
+install-data-hook:
+	rm -f $(DESTDIR)$(mandir)/man1/arecord.1
+	(cd $(DESTDIR)$(mandir)/man1 && $(LN_S) aplay.1 arecord.1)
+# 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:
Index: debian/alsa-utils/aplay/aplay.1
diff -u debian/alsa-utils/aplay/aplay.1:1.3 debian/alsa-utils/aplay/aplay.1:1.4
--- debian/alsa-utils/aplay/aplay.1:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/aplay/aplay.1	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,143 @@
+.TH APLAY 1 "2 August 2001"
+.SH NAME
+arecord, aplay \- command-line sound recorder and player for ALSA 
+soundcard driver
+.SH SYNOPSIS
+\fBarecord\fP [\fIflags\fP] [filename]
+.SH SYNOPSIS
+\fBaplay\fP [\fIflags\fP] [filename [filename]] ...
+
+.SH DESCRIPTION
+\fBarecord\fP is a command-line soundfile recorder for the ALSA soundcard
+driver. It supports several file formats and multiple soundcards with
+multiple devices. 
+
+\fBaplay\fP is much the same, only it plays instead of recording. For
+supported soundfile formats, the sampling rate, bit depth, and so
+forth can be automatically determined from the soundfile header.
+
+.SH INVOKING
+
+[\fBarecord\fP | \fBaplay\fP ] [\fIflags\fP] filename
+.TP
+If filename is not specified, the standard output or input is used. The \fBaplay\fP utility accepts multiple filenames.
+
+
+.SS Options
+.TP
+\fI--help\fP
+Help: show syntax.
+.TP
+\fI--version\fP
+Print current version.
+.TP
+\fI-l, --list-devices\fP
+List all soundcards and digital audio devices
+.TP
+\fI-L, --list-pcms\fP
+List all PCMs defined
+.TP
+\fI-D, --device=NAME\fP
+Select PCM by name
+.TP
+\fI-q --quiet\fP
+Quiet mode. Suppress messages (not sound :))
+.TP
+\fI-t, --file-type TYPE\fP
+File type (voc, wav, raw or au)
+.TP
+\fI-c, --channels=#\fP
+The number of channels
+.TP
+\fI-f --format=FORMAT\fP
+Sample format
+.br
+Recognized sample formats are: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE
+S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE
+FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW
+A_LAW IMA_ADPCM MPEG GSM
+.br
+Some of these may not be available on selected hardware
+.br
+There are also two format shortcuts available:
+.nf
+-f cd (16 bit little endian, 44100, stereo [-f S16_LE -c2 -r44100]
+-f dat (16 bit little endian, 48000, stereo) [-f S16_LE -c2 -r48000]
+.fi
+.TP
+\fI-r, --rate=#<Hz>\fP
+Sampling rate in Hertz.
+.TP
+\fI-d, --duration=#\fP
+Interrupt after # seconds
+.TP
+\fI-s, --sleep-min=#\fP
+Min ticks to sleep
+.TP
+\fI-M, --mmap\fP            
+Mmap stream
+.TP
+\fI-N, --nonblock\fP          
+Nonblocking mode
+.TP
+\fI-F, --period-time=#\fP     
+Distance between interrupts is # microseconds
+.TP
+\fI-B, --buffer-time=#\fP     
+Buffer duration is # microseconds
+.TP
+\fI-A, --avail-min=#\fP       
+Min available space for wakeup is # microseconds
+.TP
+\fI-R, --start-delay=#\fP     
+Delay for automatic PCM start is # microseconds 
+(relative to buffer size if <= 0)
+.TP
+\fI-T, --stop-delay=#\fP      
+Delay for automatic PCM stop is # microseconds from xrun
+.TP
+\fI-v, --verbose\fP           
+Show PCM structure and setup
+.TP
+\fI-I, --separate-channels\fP 
+One file for each channel
+.TP
+
+.SS
+Example: 
+
+.RS
+\fBaplay -c 1 -t raw -r 22050 -f mu_law foobar\fR
+
+.ID
+will play the raw file "foobar" as a
+22050-Hz, mono, 8-bit, Mu-Law .au file. 
+
+\fBarecord -d 10 -f cd -t wav -D copy foobar.wav\fP
+
+will record foobar.wav as a 10-second, CD-quality wave file, using the
+PCM "copy" (which might be defined in the user's .asoundrc file as:
+.nf
+pcm.copy {
+  type plug
+  slave {
+    pcm hw
+  }
+  route_policy copy
+}
+.fi
+
+.SH SEE ALSO
+\fB
+alsamixer(1),
+amixer(1)
+\fP
+
+.SH BUGS 
+Note that .aiff files are not currently supported.
+
+.SH AUTHOR
+\fBarecord\fP and \fBaplay\fP are by Jaroslav Kysela <perex@suse.cz>
+This document is by Paul Winkler <zarmzarm@erols.com>.
+Updated for Alsa 0.9 by James Tappin <james@xena.uklinux.net>
+
Index: debian/alsa-utils/aplay/aplay.c
diff -u debian/alsa-utils/aplay/aplay.c:1.3 debian/alsa-utils/aplay/aplay.c:1.4
--- debian/alsa-utils/aplay/aplay.c:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/aplay/aplay.c	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,2055 @@
+/*
+ *  aplay.c - plays and records
+ *
+ *      CREATIVE LABS CHANNEL-files
+ *      Microsoft WAVE-files
+ *      SPARC AUDIO .AU-files
+ *      Raw Data
+ *
+ *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
+ *  Based on vplay program by Michael Beck
+ *
+ *
+ *   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
+ *
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <malloc.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <errno.h>
+#define ALSA_PCM_NEW_HW_PARAMS_API
+#define ALSA_PCM_NEW_SW_PARAMS_API
+#include <alsa/asoundlib.h>
+#include <assert.h>
+#include <sys/poll.h>
+#include <sys/uio.h>
+#include <sys/time.h>
+#include <sys/signal.h>
+#include "aconfig.h"
+#include "formats.h"
+#include "version.h"
+
+#define DEFAULT_SPEED 		8000
+
+#define FORMAT_DEFAULT		-1
+#define FORMAT_RAW		0
+#define FORMAT_VOC		1
+#define FORMAT_WAVE		2
+#define FORMAT_AU		3
+
+/* global data */
+
+static snd_pcm_sframes_t (*readi_func)(snd_pcm_t *handle, void *buffer, snd_pcm_uframes_t size);
+static snd_pcm_sframes_t (*writei_func)(snd_pcm_t *handle, const void *buffer, snd_pcm_uframes_t size);
+static snd_pcm_sframes_t (*readn_func)(snd_pcm_t *handle, void **bufs, snd_pcm_uframes_t size);
+static snd_pcm_sframes_t (*writen_func)(snd_pcm_t *handle, void **bufs, snd_pcm_uframes_t size);
+
+static char *command;
+static snd_pcm_t *handle;
+static struct {
+	snd_pcm_format_t format;
+	unsigned int channels;
+	unsigned int rate;
+} hwparams, rhwparams;
+static int timelimit = 0;
+static int quiet_mode = 0;
+static int file_type = FORMAT_DEFAULT;
+static unsigned int sleep_min = 0;
+static int open_mode = 0;
+static snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
+static int mmap_flag = 0;
+static int interleaved = 1;
+static int nonblock = 0;
+static char *audiobuf = NULL;
+static snd_pcm_uframes_t chunk_size = 0;
+static unsigned period_time = 0;
+static unsigned buffer_time = 0;
+static int avail_min = -1;
+static int start_delay = 0;
+static int stop_delay = 0;
+static int verbose = 0;
+static int buffer_pos = 0;
+static size_t bits_per_sample, bits_per_frame;
+static size_t chunk_bytes;
+static snd_output_t *log;
+
+static int fd = -1;
+static size_t pbrec_count = (size_t)-1, fdcount;
+static int vocmajor, vocminor;
+
+/* needed prototypes */
+
+static void playback(char *filename);
+static void capture(char *filename);
+static void playbackv(char **filenames, unsigned int count);
+static void capturev(char **filenames, unsigned int count);
+
+static void begin_voc(int fd, size_t count);
+static void end_voc(int fd);
+static void begin_wave(int fd, size_t count);
+static void end_wave(int fd);
+static void end_raw(int fd);
+static void begin_au(int fd, size_t count);
+static void end_au(int fd);
+
+struct fmt_capture {
+	void (*start) (int fd, size_t count);
+	void (*end) (int fd);
+	char *what;
+} fmt_rec_table[] = {
+	{	NULL,		end_raw,	"raw data"	},
+	{	begin_voc,	end_voc,	"VOC"		},
+	{	begin_wave,	end_wave,	"WAVE"		},
+	{	begin_au,	end_au,		"Sparc Audio"	}
+};
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#define error(...) do {\
+	fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \
+	fprintf(stderr, __VA_ARGS__); \
+	putc('\n', stderr); \
+} while (0)
+#else
+#define error(args...) do {\
+	fprintf(stderr, "%s: %s:%d: ", command, __FUNCTION__, __LINE__); \
+	fprintf(stderr, ##args); \
+	putc('\n', stderr); \
+} while (0)
+#endif	
+
+static void usage(char *command)
+{
+	snd_pcm_format_t k;
+	fprintf(stderr,
+"Usage: %s [OPTION]... [FILE]...\n"
+"\n"
+"--help                  help\n"
+"--version               print current version\n"
+"-l, --list-devices      list all soundcards and digital audio devices\n"
+"-L, --list-pcms         list all PCMs defined\n"
+"-D, --device=NAME       select PCM by name\n"
+"-q, --quiet             quiet mode\n"
+"-t, --file-type TYPE    file type (voc, wav, raw or au)\n"
+"-c, --channels=#        channels\n"
+"-f, --format=FORMAT     sample format (case insensitive)\n"
+"-r, --rate=#            sample rate\n"
+"-d, --duration=#        interrupt after # seconds\n"
+"-s, --sleep-min=#       min ticks to sleep\n"
+"-M, --mmap              mmap stream\n"
+"-N, --nonblock          nonblocking mode\n"
+"-F, --period-time=#     distance between interrupts is # microseconds\n"
+"-B, --buffer-time=#     buffer duration is # microseconds\n"
+"-A, --avail-min=#       min available space for wakeup is # microseconds\n"
+"-R, --start-delay=#     delay for automatic PCM start is # microseconds \n"
+"                        (relative to buffer size if <= 0)\n"
+"-T, --stop-delay=#      delay for automatic PCM stop is # microseconds from xrun\n"
+"-v, --verbose           show PCM structure and setup (accumulative)\n"
+"-I, --separate-channels one file for each channel\n"
+		, command);
+	fprintf(stderr, "Recognized sample formats are:");
+	for (k = 0; k < SND_PCM_FORMAT_LAST; ++(unsigned long) k) {
+		const char *s = snd_pcm_format_name(k);
+		if (s)
+			fprintf(stderr, " %s", s);
+	}
+	fprintf(stderr, "\nSome of these may not be available on selected hardware\n");
+	fprintf(stderr, "The availabled format shortcuts are:\n");
+	fprintf(stderr, "-f cd (16 bit little endian, 44100, stereo)\n");
+	fprintf(stderr, "-f dat (16 bit little endian, 48000, stereo)\n");
+}
+
+static void device_list(void)
+{
+	snd_ctl_t *handle;
+	int card, err, dev, idx;
+	snd_ctl_card_info_t *info;
+	snd_pcm_info_t *pcminfo;
+	snd_ctl_card_info_alloca(&info);
+	snd_pcm_info_alloca(&pcminfo);
+
+	card = -1;
+	if (snd_card_next(&card) < 0 || card < 0) {
+		error("no soundcards found...");
+		return;
+	}
+	while (card >= 0) {
+		char name[32];
+		sprintf(name, "hw:%d", card);
+		if ((err = snd_ctl_open(&handle, name, 0)) < 0) {
+			error("control open (%i): %s", card, snd_strerror(err));
+			continue;
+		}
+		if ((err = snd_ctl_card_info(handle, info)) < 0) {
+			error("control hardware info (%i): %s", card, snd_strerror(err));
+			snd_ctl_close(handle);
+			continue;
+		}
+		fprintf(stderr, "**** List of %s Hardware Devices ****\n", snd_pcm_stream_name(stream));
+		dev = -1;
+		while (1) {
+			unsigned int count;
+			if (snd_ctl_pcm_next_device(handle, &dev)<0)
+				error("snd_ctl_pcm_next_device");
+			if (dev < 0)
+				break;
+			snd_pcm_info_set_device(pcminfo, dev);
+			snd_pcm_info_set_subdevice(pcminfo, 0);
+			snd_pcm_info_set_stream(pcminfo, stream);
+			if ((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) {
+				if (err != -ENOENT)
+					error("control digital audio info (%i): %s", card, snd_strerror(err));
+				continue;
+			}
+			fprintf(stderr, "card %i: %s [%s], device %i: %s [%s]\n",
+				card, snd_ctl_card_info_get_id(info), snd_ctl_card_info_get_name(info),
+				dev,
+				snd_pcm_info_get_id(pcminfo),
+				snd_pcm_info_get_name(pcminfo));
+			count = snd_pcm_info_get_subdevices_count(pcminfo);
+			fprintf(stderr, "  Subdevices: %i/%i\n", snd_pcm_info_get_subdevices_avail(pcminfo), count);
+			for (idx = 0; idx < (int)count; idx++) {
+				snd_pcm_info_set_subdevice(pcminfo, idx);
+				if ((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) {
+					error("control digital audio playback info (%i): %s", card, snd_strerror(err));
+				} else {
+					fprintf(stderr, "  Subdevice #%i: %s\n", idx, snd_pcm_info_get_subdevice_name(pcminfo));
+				}
+			}
+		}
+		snd_ctl_close(handle);
+		if (snd_card_next(&card) < 0) {
+			error("snd_card_next");
+			break;
+		}
+	}
+}
+
+static void pcm_list(void)
+{
+	snd_config_t *conf;
+	snd_output_t *out;
+	int err = snd_config_update();
+	if (err < 0) {
+		error("snd_config_update: %s", snd_strerror(err));
+		return;
+	}
+	err = snd_output_stdio_attach(&out, stderr, 0);
+	assert(err >= 0);
+	err = snd_config_search(snd_config, "pcm", &conf);
+	if (err < 0)
+		return;
+	fprintf(stderr, "PCM list:\n");
+	snd_config_save(conf, out);
+	snd_output_close(out);
+}
+
+static void version(void)
+{
+	fprintf(stderr, "%s: version " SND_UTIL_VERSION_STR " by Jaroslav Kysela <perex@suse.cz>", command);
+}
+
+static void signal_handler(int sig)
+{
+	if (!quiet_mode)
+		fprintf(stderr, "Aborted by signal %s...\n", strsignal(sig));
+	if (stream == SND_PCM_STREAM_CAPTURE) {
+		fmt_rec_table[file_type].end(fd);
+		stream = -1;
+	}
+	if (fd > 1) {
+		close(fd);
+		fd = -1;
+	}
+	if (handle) {
+		snd_pcm_close(handle);
+		handle = NULL;
+	}
+	exit(EXIT_FAILURE);
+}
+
+#define OPT_HELP 1
+#define OPT_VERSION 2
+
+int main(int argc, char *argv[])
+{
+	int option_index;
+	char *short_options = "lLD:qt:c:f:r:d:s:MNF:A:X:R:T:B:vIPC";
+	static struct option long_options[] = {
+		{"help", 0, 0, OPT_HELP},
+		{"version", 0, 0, OPT_VERSION},
+		{"list-devices", 0, 0, 'l'},
+		{"list-pcms", 0, 0, 'L'},
+		{"device", 1, 0, 'D'},
+		{"quiet", 0, 0, 'q'},
+		{"file-type", 1, 0, 't'},
+		{"channels", 1, 0, 'c'},
+		{"format", 1, 0, 'f'},
+		{"rate", 1, 0, 'r'},
+		{"duration", 1, 0 ,'d'},
+		{"sleep-min", 0, 0, 's'},
+		{"mmap", 0, 0, 'M'},
+		{"nonblock", 0, 0, 'N'},
+		{"period-time", 1, 0, 'F'},
+		{"avail-min", 1, 0, 'A'},
+		{"start-delay", 1, 0, 'R'},
+		{"stop-delay", 1, 0, 'T'},
+		{"buffer-time", 1, 0, 'B'},
+		{"verbose", 0, 0, 'v'},
+		{"separate-channels", 0, 0, 'I'},
+		{"playback", 0, 0, 'P'},
+		{"capture", 0, 0, 'C'},
+		{0, 0, 0, 0}
+	};
+	char *pcm_name = "default";
+	int tmp, err, c;
+	int do_device_list = 0, do_pcm_list = 0;
+	snd_pcm_info_t *info;
+
+	err = snd_output_stdio_attach(&log, stderr, 0);
+	assert(err >= 0);
+
+	command = argv[0];
+	file_type = FORMAT_DEFAULT;
+	if (strstr(argv[0], "arecord")) {
+		stream = SND_PCM_STREAM_CAPTURE;
+		file_type = FORMAT_WAVE;
+		command = "arecord";
+		start_delay = 1;
+	} else if (strstr(argv[0], "aplay")) {
+		stream = SND_PCM_STREAM_PLAYBACK;
+		command = "aplay";
+	} else {
+		error("command should be named either arecord or aplay");
+		return 1;
+	}
+
+	chunk_size = -1;
+	rhwparams.format = SND_PCM_FORMAT_U8;
+	rhwparams.rate = DEFAULT_SPEED;
+	rhwparams.channels = 1;
+
+	while ((c = getopt_long(argc, argv, short_options, long_options, &option_index)) != -1) {
+		switch (c) {
+		case OPT_HELP:
+			usage(command);
+			return 0;
+		case OPT_VERSION:
+			version();
+			return 0;
+		case 'l':
+			do_device_list = 1;
+			break;
+		case 'L':
+			do_pcm_list = 1;
+			break;
+		case 'D':
+			pcm_name = optarg;
+			break;
+		case 'q':
+			quiet_mode = 1;
+			break;
+		case 't':
+			if (strcasecmp(optarg, "raw") == 0)
+				file_type = FORMAT_RAW;
+			else if (strcasecmp(optarg, "voc") == 0)
+				file_type = FORMAT_VOC;
+			else if (strcasecmp(optarg, "wav") == 0)
+				file_type = FORMAT_WAVE;
+			else if (strcasecmp(optarg, "au") == 0 || strcasecmp(optarg, "sparc") == 0)
+				file_type = FORMAT_AU;
+			else {
+				error("unrecognized file format %s", optarg);
+				return 1;
+			}
+			break;
+		case 'c':
+			rhwparams.channels = atoi(optarg);
+			if (rhwparams.channels < 1 || rhwparams.channels > 32) {
+				error("value %i for channels is invalid", rhwparams.channels);
+				return 1;
+			}
+			break;
+		case 'f':
+			if (strcasecmp(optarg, "cd") == 0) {
+				rhwparams.format = file_type == FORMAT_AU ? SND_PCM_FORMAT_S16_BE : SND_PCM_FORMAT_S16_LE;
+				rhwparams.rate = 44100;
+				rhwparams.channels = 2;
+			} else if (strcasecmp(optarg, "dat") == 0) {
+				rhwparams.format = file_type == FORMAT_AU ? SND_PCM_FORMAT_S16_BE : SND_PCM_FORMAT_S16_LE;
+				rhwparams.rate = 48000;
+				rhwparams.channels = 2;
+			} else {
+				rhwparams.format = snd_pcm_format_value(optarg);
+				if (rhwparams.format == SND_PCM_FORMAT_UNKNOWN) {
+					error("wrong extended format '%s'", optarg);
+					exit(EXIT_FAILURE);
+				}
+			}
+			break;
+		case 'r':
+			tmp = atoi(optarg);
+			if (tmp < 300)
+				tmp *= 1000;
+			rhwparams.rate = tmp;
+			if (tmp < 2000 || tmp > 128000) {
+				error("bad speed value %i", tmp);
+				return 1;
+			}
+			break;
+		case 'd':
+			timelimit = atoi(optarg);
+			break;
+		case 's':
+			sleep_min = atoi(optarg);
+			break;
+		case 'N':
+			nonblock = 1;
+			open_mode |= SND_PCM_NONBLOCK;
+			break;
+		case 'F':
+			period_time = atoi(optarg);
+			break;
+		case 'B':
+			buffer_time = atoi(optarg);
+			break;
+		case 'A':
+			avail_min = atoi(optarg);
+			break;
+		case 'R':
+			start_delay = atoi(optarg);
+			break;
+		case 'T':
+			stop_delay = atoi(optarg);
+			break;
+		case 'v':
+			verbose++;
+			break;
+		case 'M':
+			mmap_flag = 1;
+			break;
+		case 'I':
+			interleaved = 0;
+			break;
+		case 'P':
+			stream = SND_PCM_STREAM_PLAYBACK;
+			command = "aplay";
+			break;
+		case 'C':
+			stream = SND_PCM_STREAM_CAPTURE;
+			command = "arecord";
+			start_delay = 1;
+			if (file_type == FORMAT_DEFAULT)
+				file_type = FORMAT_WAVE;
+			break;
+		default:
+			fprintf(stderr, "Try `%s --help' for more information.\n", command);
+			return 1;
+		}
+	}
+
+	if (do_device_list) {
+		if (do_pcm_list) pcm_list();
+		device_list();
+		return 0;
+	} else if (do_pcm_list) {
+		pcm_list();
+		return 0;
+	}
+
+	err = snd_pcm_open(&handle, pcm_name, stream, open_mode);
+	if (err < 0) {
+		error("audio open error: %s", snd_strerror(err));
+		return 1;
+	}
+
+	snd_pcm_info_alloca(&info);
+	if ((err = snd_pcm_info(handle, info)) < 0) {
+		error("info error: %s", snd_strerror(err));
+		return 1;
+	}
+
+	if (nonblock) {
+		err = snd_pcm_nonblock(handle, 1);
+		if (err < 0) {
+			error("nonblock setting error: %s", snd_strerror(err));
+			return 1;
+		}
+	}
+
+	chunk_size = 1024;
+	hwparams = rhwparams;
+
+	audiobuf = (char *)malloc(1024);
+	if (audiobuf == NULL) {
+		error("not enough memory");
+		return 1;
+	}
+
+	if (mmap_flag) {
+		writei_func = snd_pcm_mmap_writei;
+		readi_func = snd_pcm_mmap_readi;
+		writen_func = snd_pcm_mmap_writen;
+		readn_func = snd_pcm_mmap_readn;
+	} else {
+		writei_func = snd_pcm_writei;
+		readi_func = snd_pcm_readi;
+		writen_func = snd_pcm_writen;
+		readn_func = snd_pcm_readn;
+	}
+
+
+	signal(SIGINT, signal_handler);
+	signal(SIGTERM, signal_handler);
+	signal(SIGABRT, signal_handler);
+	if (interleaved) {
+		if (optind > argc - 1) {
+			if (stream == SND_PCM_STREAM_PLAYBACK)
+				playback(NULL);
+			else
+				capture(NULL);
+		} else {
+			while (optind <= argc - 1) {
+				if (stream == SND_PCM_STREAM_PLAYBACK)
+					playback(argv[optind++]);
+				else
+					capture(argv[optind++]);
+			}
+		}
+	} else {
+		if (stream == SND_PCM_STREAM_PLAYBACK)
+			playbackv(&argv[optind], argc - optind);
+		else
+			capturev(&argv[optind], argc - optind);
+	}
+	snd_pcm_close(handle);
+	free(audiobuf);
+	snd_output_close(log);
+	return EXIT_SUCCESS;
+}
+
+/*
+ * Safe read (for pipes)
+ */
+ 
+ssize_t safe_read(int fd, void *buf, size_t count)
+{
+	ssize_t result = 0, res;
+
+	while (count > 0) {
+		if ((res = read(fd, buf, count)) == 0)
+			break;
+		if (res < 0)
+			return result > 0 ? result : res;
+		count -= res;
+		result += res;
+		(char *)buf += res;
+	}
+	return result;
+}
+
+/*
+ * Test, if it is a .VOC file and return >=0 if ok (this is the length of rest)
+ *                                       < 0 if not 
+ */
+static int test_vocfile(void *buffer)
+{
+	VocHeader *vp = buffer;
+
+	if (strstr(vp->magic, VOC_MAGIC_STRING)) {
+		vocminor = vp->version & 0xFF;
+		vocmajor = vp->version / 256;
+		if (vp->version != (0x1233 - vp->coded_ver))
+			return -2;	/* coded version mismatch */
+		return vp->headerlen - sizeof(VocHeader);	/* 0 mostly */
+	}
+	return -1;		/* magic string fail */
+}
+
+/*
+ * helper for test_wavefile
+ */
+
+size_t test_wavefile_read(int fd, char *buffer, size_t *size, size_t reqsize, int line)
+{
+	if (*size >= reqsize)
+		return *size;
+	if ((size_t)safe_read(fd, buffer + *size, reqsize - *size) != reqsize - *size) {
+		error("read error (called from line %i)", line);
+		exit(EXIT_FAILURE);
+	}
+	return *size = reqsize;
+}
+
+#define check_wavefile_space(buffer, size, len, blimit) \
+	if (size + len > blimit) \
+		blimit = size + len; \
+	if ((buffer = realloc(buffer, blimit)) == NULL) { \
+		error("not enough memory"); \
+		exit(EXIT_FAILURE); \
+	}
+
+/*
+ * test, if it's a .WAV file, > 0 if ok (and set the speed, stereo etc.)
+ *                            == 0 if not
+ * Value returned is bytes to be discarded.
+ */
+static ssize_t test_wavefile(int fd, char *_buffer, size_t size)
+{
+	WaveHeader *h = (WaveHeader *)_buffer;
+	char *buffer = NULL;
+	size_t blimit = 0;
+	WaveFmtBody *f;
+	WaveChunkHeader *c;
+	u_int type, len;
+
+	if (size < sizeof(WaveHeader))
+		return -1;
+	if (h->magic != WAV_RIFF || h->type != WAV_WAVE)
+		return -1;
+	if (size > sizeof(WaveHeader)) {
+		check_wavefile_space(buffer, size, size - sizeof(WaveHeader), blimit);
+		memcpy(buffer, _buffer + sizeof(WaveHeader), size - sizeof(WaveHeader));
+	}
+	size -= sizeof(WaveHeader);
+	while (1) {
+		check_wavefile_space(buffer, size, sizeof(WaveChunkHeader), blimit);
+		test_wavefile_read(fd, buffer, &size, sizeof(WaveChunkHeader), __LINE__);
+		c = (WaveChunkHeader*)buffer;
+		type = c->type;
+		len = LE_INT(c->length);
+		if (size > sizeof(WaveChunkHeader))
+			memmove(buffer, buffer + sizeof(WaveChunkHeader), size - sizeof(WaveChunkHeader));
+		size -= sizeof(WaveChunkHeader);
+		if (type == WAV_FMT)
+			break;
+		check_wavefile_space(buffer, size, len, blimit);
+		test_wavefile_read(fd, buffer, &size, len, __LINE__);
+		if (size > len)
+			memmove(buffer, buffer + len, size - len);
+		size -= len;
+	}
+
+	if (len < sizeof(WaveFmtBody)) {
+		error("unknown length of 'fmt ' chunk (read %u, should be %u at least)", len, (u_int)sizeof(WaveFmtBody));
+		exit(EXIT_FAILURE);
+	}
+	check_wavefile_space(buffer, size, len, blimit);
+	test_wavefile_read(fd, buffer, &size, len, __LINE__);
+	f = (WaveFmtBody*) buffer;
+	if (LE_SHORT(f->format) != WAV_PCM_CODE) {
+		error("can't play not PCM-coded WAVE-files");
+		exit(EXIT_FAILURE);
+	}
+	if (LE_SHORT(f->modus) < 1) {
+		error("can't play WAVE-files with %d tracks", LE_SHORT(f->modus));
+		exit(EXIT_FAILURE);
+	}
+	hwparams.channels = LE_SHORT(f->modus);
+	switch (LE_SHORT(f->bit_p_spl)) {
+	case 8:
+		hwparams.format = SND_PCM_FORMAT_U8;
+		break;
+	case 16:
+		hwparams.format = SND_PCM_FORMAT_S16_LE;
+		break;
+	case 24:
+		switch (LE_SHORT(f->byte_p_spl) / hwparams.channels) {
+		case 3:
+			hwparams.format = SND_PCM_FORMAT_S24_3LE;
+			break;
+		case 4:
+			hwparams.format = SND_PCM_FORMAT_S24_LE;
+			break;
+		default:
+			error(" can't play WAVE-files with sample %d bits in %d bytes wide (%d channels)", LE_SHORT(f->bit_p_spl), LE_SHORT(f->byte_p_spl), hwparams.channels);
+			exit(EXIT_FAILURE);
+		}
+		break;
+	case 32:
+		hwparams.format = SND_PCM_FORMAT_S32_LE;
+		break;
+	default:
+		error(" can't play WAVE-files with sample %d bits wide", LE_SHORT(f->bit_p_spl));
+		exit(EXIT_FAILURE);
+	}
+	hwparams.rate = LE_INT(f->sample_fq);
+	
+	if (size > len)
+		memmove(buffer, buffer + len, size - len);
+	size -= len;
+	
+	while (1) {
+		u_int type, len;
+
+		check_wavefile_space(buffer, size, sizeof(WaveChunkHeader), blimit);
+		test_wavefile_read(fd, buffer, &size, sizeof(WaveChunkHeader), __LINE__);
+		c = (WaveChunkHeader*)buffer;
+		type = c->type;
+		len = LE_INT(c->length);
+		if (size > sizeof(WaveChunkHeader))
+			memmove(buffer, buffer + sizeof(WaveChunkHeader), size - sizeof(WaveChunkHeader));
+		size -= sizeof(WaveChunkHeader);
+		if (type == WAV_DATA) {
+			if (len < pbrec_count)
+				pbrec_count = len;
+			if (size > 0)
+				memcpy(_buffer, buffer, size);
+			free(buffer);
+			return size;
+		}
+		check_wavefile_space(buffer, size, len, blimit);
+		test_wavefile_read(fd, buffer, &size, len, __LINE__);
+		if (size > len)
+			memmove(buffer, buffer + len, size - len);
+		size -= len;
+	}
+
+	/* shouldn't be reached */
+	return -1;
+}
+
+/*
+
+ */
+
+static int test_au(int fd, void *buffer)
+{
+	AuHeader *ap = buffer;
+
+	if (ap->magic != AU_MAGIC)
+		return -1;
+	if (BE_INT(ap->hdr_size) > 128 || BE_INT(ap->hdr_size) < 24)
+		return -1;
+	pbrec_count = BE_INT(ap->data_size);
+	switch (BE_INT(ap->encoding)) {
+	case AU_FMT_ULAW:
+		hwparams.format = SND_PCM_FORMAT_MU_LAW;
+		break;
+	case AU_FMT_LIN8:
+		hwparams.format = SND_PCM_FORMAT_U8;
+		break;
+	case AU_FMT_LIN16:
+		hwparams.format = SND_PCM_FORMAT_S16_BE;
+		break;
+	default:
+		return -1;
+	}
+	hwparams.rate = BE_INT(ap->sample_rate);
+	if (hwparams.rate < 2000 || hwparams.rate > 256000)
+		return -1;
+	hwparams.channels = BE_INT(ap->channels);
+	if (hwparams.channels < 1 || hwparams.channels > 128)
+		return -1;
+	if ((size_t)safe_read(fd, buffer + sizeof(AuHeader), BE_INT(ap->hdr_size) - sizeof(AuHeader)) != BE_INT(ap->hdr_size) - sizeof(AuHeader)) {
+		error("read error");
+		exit(EXIT_FAILURE);
+	}
+	return 0;
+}
+
+static void set_params(void)
+{
+	snd_pcm_hw_params_t *params;
+	snd_pcm_sw_params_t *swparams;
+	snd_pcm_uframes_t buffer_size;
+	int err;
+	size_t n;
+	snd_pcm_uframes_t xfer_align;
+	unsigned int rate;
+	snd_pcm_uframes_t start_threshold, stop_threshold;
+	snd_pcm_hw_params_alloca(&params);
+	snd_pcm_sw_params_alloca(&swparams);
+	err = snd_pcm_hw_params_any(handle, params);
+	if (err < 0) {
+		error("Broken configuration for this PCM: no configurations available");
+		exit(EXIT_FAILURE);
+	}
+	if (mmap_flag) {
+		snd_pcm_access_mask_t *mask = alloca(snd_pcm_access_mask_sizeof());
+		snd_pcm_access_mask_none(mask);
+		snd_pcm_access_mask_set(mask, SND_PCM_ACCESS_MMAP_INTERLEAVED);
+		snd_pcm_access_mask_set(mask, SND_PCM_ACCESS_MMAP_NONINTERLEAVED);
+		snd_pcm_access_mask_set(mask, SND_PCM_ACCESS_MMAP_COMPLEX);
+		err = snd_pcm_hw_params_set_access_mask(handle, params, mask);
+	} else if (interleaved)
+		err = snd_pcm_hw_params_set_access(handle, params,
+						   SND_PCM_ACCESS_RW_INTERLEAVED);
+	else
+		err = snd_pcm_hw_params_set_access(handle, params,
+						   SND_PCM_ACCESS_RW_NONINTERLEAVED);
+	if (err < 0) {
+		error("Access type not available");
+		exit(EXIT_FAILURE);
+	}
+	err = snd_pcm_hw_params_set_format(handle, params, hwparams.format);
+	if (err < 0) {
+		error("Sample format non available");
+		exit(EXIT_FAILURE);
+	}
+	err = snd_pcm_hw_params_set_channels(handle, params, hwparams.channels);
+	if (err < 0) {
+		error("Channels count non available");
+		exit(EXIT_FAILURE);
+	}
+
+#if 0
+	err = snd_pcm_hw_params_set_periods_min(handle, params, 2);
+	assert(err >= 0);
+#endif
+	rate = hwparams.rate;
+	err = snd_pcm_hw_params_set_rate_near(handle, params, &hwparams.rate, 0);
+	assert(err >= 0);
+	if ((float)rate * 1.05 < hwparams.rate || (float)rate * 0.95 > hwparams.rate) {
+		if (!quiet_mode) {
+			fprintf(stderr, "Warning: rate is not accurate (requested = %iHz, got = %iHz)\n", rate, hwparams.rate);
+			fprintf(stderr, "         please, try the plug plugin (-Dplug:%s)\n", snd_pcm_name(handle));
+		}
+	}
+	rate = hwparams.rate;
+	if (buffer_time == 0)
+		buffer_time = 500000;
+	err = snd_pcm_hw_params_set_buffer_time_near(handle, params,
+						     &buffer_time, 0);
+	assert(err >= 0);
+	if (period_time == 0)
+		period_time = buffer_time / 4;
+	err = snd_pcm_hw_params_set_period_time_near(handle, params,
+						     &period_time, 0);
+	assert(err >= 0);
+	err = snd_pcm_hw_params(handle, params);
+	if (err < 0) {
+		error("Unable to install hw params:");
+		snd_pcm_hw_params_dump(params, log);
+		exit(EXIT_FAILURE);
+	}
+	snd_pcm_hw_params_get_period_size(params, &chunk_size, 0);
+	snd_pcm_hw_params_get_buffer_size(params, &buffer_size);
+	if (chunk_size == buffer_size) {
+		error("Can't use period equal to buffer size (%lu == %lu)", chunk_size, buffer_size);
+		exit(EXIT_FAILURE);
+	}
+	snd_pcm_sw_params_current(handle, swparams);
+	err = snd_pcm_sw_params_get_xfer_align(swparams, &xfer_align);
+	if (err < 0) {
+		error("Unable to obtain xfer align\n");
+		exit(EXIT_FAILURE);
+	}
+	if (sleep_min)
+		xfer_align = 1;
+	err = snd_pcm_sw_params_set_sleep_min(handle, swparams,
+					      sleep_min);
+	assert(err >= 0);
+	if (avail_min < 0)
+		n = chunk_size;
+	else
+		n = (double) rate * avail_min / 1000000;
+	err = snd_pcm_sw_params_set_avail_min(handle, swparams, n);
+
+	/* round up to closest transfer boundary */
+	n = (buffer_size / xfer_align) * xfer_align;
+	if (start_delay <= 0) {
+		start_threshold = n + (double) rate * start_delay / 1000000;
+	} else
+		start_threshold = (double) rate * start_delay / 1000000;
+	if (start_threshold < 1)
+		start_threshold = 1;
+	if (start_threshold > n)
+		start_threshold = n;
+	err = snd_pcm_sw_params_set_start_threshold(handle, swparams, start_threshold);
+	assert(err >= 0);
+	if (stop_delay <= 0) 
+		stop_threshold = buffer_size + (double) rate * stop_delay / 1000000;
+	else
+		stop_threshold = (double) rate * stop_delay / 1000000;
+	err = snd_pcm_sw_params_set_stop_threshold(handle, swparams, stop_threshold);
+	assert(err >= 0);
+
+	err = snd_pcm_sw_params_set_xfer_align(handle, swparams, xfer_align);
+	assert(err >= 0);
+	if (snd_pcm_sw_params(handle, swparams) < 0) {
+		error("unable to install sw params:");
+		snd_pcm_sw_params_dump(swparams, log);
+		exit(EXIT_FAILURE);
+	}
+
+	if (verbose)
+		snd_pcm_dump(handle, log);
+
+	bits_per_sample = snd_pcm_format_physical_width(hwparams.format);
+	bits_per_frame = bits_per_sample * hwparams.channels;
+	chunk_bytes = chunk_size * bits_per_frame / 8;
+	audiobuf = realloc(audiobuf, chunk_bytes);
+	if (audiobuf == NULL) {
+		error("not enough memory");
+		exit(EXIT_FAILURE);
+	}
+	// fprintf(stderr, "real chunk_size = %i, frags = %i, total = %i\n", chunk_size, setup.buf.block.frags, setup.buf.block.frags * chunk_size);
+}
+
+#ifndef timersub
+#define	timersub(a, b, result) \
+do { \
+	(result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
+	(result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
+	if ((result)->tv_usec < 0) { \
+		--(result)->tv_sec; \
+		(result)->tv_usec += 1000000; \
+	} \
+} while (0)
+#endif
+
+/* I/O error handler */
+static void xrun(void)
+{
+	snd_pcm_status_t *status;
+	int res;
+	
+	snd_pcm_status_alloca(&status);
+	if ((res = snd_pcm_status(handle, status))<0) {
+		error("status error: %s", snd_strerror(res));
+		exit(EXIT_FAILURE);
+	}
+	if (snd_pcm_status_get_state(status) == SND_PCM_STATE_XRUN) {
+		struct timeval now, diff, tstamp;
+		gettimeofday(&now, 0);
+		snd_pcm_status_get_trigger_tstamp(status, &tstamp);
+		timersub(&now, &tstamp, &diff);
+		fprintf(stderr, "xrun!!! (at least %.3f ms long)\n", diff.tv_sec * 1000 + diff.tv_usec / 1000.0);
+		if (verbose) {
+			fprintf(stderr, "Status:\n");
+			snd_pcm_status_dump(status, log);
+		}
+		if ((res = snd_pcm_prepare(handle))<0) {
+			error("xrun: prepare error: %s", snd_strerror(res));
+			exit(EXIT_FAILURE);
+		}
+		return;		/* ok, data should be accepted again */
+	}
+	error("read/write error");
+	exit(EXIT_FAILURE);
+}
+
+/* I/O suspend handler */
+static void suspend(void)
+{
+	int res;
+
+	if (!quiet_mode)
+		fprintf(stderr, "Suspended. Trying resume. "); fflush(stderr);
+	while ((res = snd_pcm_resume(handle)) == -EAGAIN)
+		sleep(1);	/* wait until suspend flag is released */
+	if (res < 0) {
+		if (!quiet_mode)
+			fprintf(stderr, "Failed. Restarting stream. "); fflush(stderr);
+		if ((res = snd_pcm_prepare(handle)) < 0) {
+			error("suspend: prepare error: %s", snd_strerror(res));
+			exit(EXIT_FAILURE);
+		}
+	}
+	if (!quiet_mode)
+		fprintf(stderr, "Done.\n");
+}
+
+/* peak handler */
+static void compute_max_peak(u_char *data, size_t count)
+{
+	signed int val, max, max_peak = 0, perc;
+	size_t step, ocount = count;
+	
+	while (count-- > 0) {
+		switch (bits_per_sample) {
+		case 8: val = *(signed char *)data ^ snd_pcm_format_silence(hwparams.format); step = 1; break;
+		case 16: val = *(signed short *)data ^ snd_pcm_format_silence_16(hwparams.format); step = 2; break;
+		case 32: val = *(signed int *)data ^ snd_pcm_format_silence_32(hwparams.format); step = 4; break;
+		default: val = 0; step = 1; break;
+		}
+		data += step;
+		if (max_peak < val)
+			max_peak = val;
+	}
+	max = 1 << (bits_per_sample-1);
+	if (max <= 0)
+		max = 0x7fffffff;
+	printf("Max peak (%li samples): %05i (0x%04x) ", (long)ocount, max_peak, max_peak);
+	perc = max_peak / (max / 100);
+	for (val = 0; val < 20; val++)
+		if (val <= perc / 5)
+			putc('#', stdout);
+		else
+			putc(' ', stdout);
+	printf(" %i%%\n", perc);
+}
+
+/*
+ *  write function
+ */
+
+static ssize_t pcm_write(u_char *data, size_t count)
+{
+	ssize_t r;
+	ssize_t result = 0;
+
+	if (sleep_min == 0 &&
+	    count < chunk_size) {
+		snd_pcm_format_set_silence(hwparams.format, data + count * bits_per_frame / 8, (chunk_size - count) * hwparams.channels);
+		count = chunk_size;
+	}
+	while (count > 0) {
+		r = writei_func(handle, data, count);
+		if (r == -EAGAIN || (r >= 0 && (size_t)r < count)) {
+			snd_pcm_wait(handle, 1000);
+		} else if (r == -EPIPE) {
+			xrun();
+		} else if (r == -ESTRPIPE) {
+			suspend();
+		} else if (r < 0) {
+			error("write error: %s", snd_strerror(r));
+			exit(EXIT_FAILURE);
+		}
+		if (r > 0) {
+			if (verbose > 1)
+				compute_max_peak(data, r * hwparams.channels);
+			result += r;
+			count -= r;
+			data += r * bits_per_frame / 8;
+		}
+	}
+	return result;
+}
+
+static ssize_t pcm_writev(u_char **data, unsigned int channels, size_t count)
+{
+	ssize_t r;
+	size_t result = 0;
+
+	if (sleep_min == 0 &&
+	    count != chunk_size) {
+		unsigned int channel;
+		size_t offset = count;
+		size_t remaining = chunk_size - count;
+		for (channel = 0; channel < channels; channel++)
+			snd_pcm_format_set_silence(hwparams.format, data[channel] + offset * bits_per_sample / 8, remaining);
+		count = chunk_size;
+	}
+	while (count > 0) {
+		unsigned int channel;
+		void *bufs[channels];
+		size_t offset = result;
+		for (channel = 0; channel < channels; channel++)
+			bufs[channel] = data[channel] + offset * bits_per_sample / 8;
+		r = writen_func(handle, bufs, count);
+		if (r == -EAGAIN || (r >= 0 && (size_t)r < count)) {
+			snd_pcm_wait(handle, 1000);
+		} else if (r == -EPIPE) {
+			xrun();
+		} else if (r == -ESTRPIPE) {
+			suspend();
+		} else if (r < 0) {
+			error("writev error: %s", snd_strerror(r));
+			exit(EXIT_FAILURE);
+		}
+		if (r > 0) {
+			if (verbose > 1) {
+				for (channel = 0; channel < channels; channel++)
+					compute_max_peak(data[channel], r);
+			}
+			result += r;
+			count -= r;
+		}
+	}
+	return result;
+}
+
+/*
+ *  read function
+ */
+
+static ssize_t pcm_read(u_char *data, size_t rcount)
+{
+	ssize_t r;
+	size_t result = 0;
+	size_t count = rcount;
+
+	if (sleep_min == 0 &&
+	    count != chunk_size) {
+		count = chunk_size;
+	}
+
+	while (count > 0) {
+		r = readi_func(handle, data, count);
+		if (r == -EAGAIN || (r >= 0 && (size_t)r < count)) {
+			snd_pcm_wait(handle, 1000);
+		} else if (r == -EPIPE) {
+			xrun();
+		} else if (r == -ESTRPIPE) {
+			suspend();
+		} else if (r < 0) {
+			error("read error: %s", snd_strerror(r));
+			exit(EXIT_FAILURE);
+		}
+		if (r > 0) {
+			if (verbose > 1)
+				compute_max_peak(data, r * hwparams.channels);
+			result += r;
+			count -= r;
+			data += r * bits_per_frame / 8;
+		}
+	}
+	return rcount;
+}
+
+static ssize_t pcm_readv(u_char **data, unsigned int channels, size_t rcount)
+{
+	ssize_t r;
+	size_t result = 0;
+	size_t count = rcount;
+
+	if (sleep_min == 0 &&
+	    count != chunk_size) {
+		count = chunk_size;
+	}
+
+	while (count > 0) {
+		unsigned int channel;
+		void *bufs[channels];
+		size_t offset = result;
+		for (channel = 0; channel < channels; channel++)
+			bufs[channel] = data[channel] + offset * bits_per_sample / 8;
+		r = readn_func(handle, bufs, count);
+		if (r == -EAGAIN || (r >= 0 && (size_t)r < count)) {
+			snd_pcm_wait(handle, 1000);
+		} else if (r == -EPIPE) {
+			xrun();
+		} else if (r == -ESTRPIPE) {
+			suspend();
+		} else if (r < 0) {
+			error("readv error: %s", snd_strerror(r));
+			exit(EXIT_FAILURE);
+		}
+		if (r > 0) {
+			if (verbose > 1) {
+				for (channel = 0; channel < channels; channel++)
+					compute_max_peak(data[channel], r);
+			}
+			result += r;
+			count -= r;
+		}
+	}
+	return rcount;
+}
+
+/*
+ *  ok, let's play a .voc file
+ */
+
+static ssize_t voc_pcm_write(u_char *data, size_t count)
+{
+	ssize_t result = count, r;
+	size_t size;
+
+	while (count > 0) {
+		size = count;
+		if (size > chunk_bytes - buffer_pos)
+			size = chunk_bytes - buffer_pos;
+		memcpy(audiobuf + buffer_pos, data, size);
+		data += size;
+		count -= size;
+		buffer_pos += size;
+		if ((size_t)buffer_pos == chunk_bytes) {
+			if ((size_t)(r = pcm_write(audiobuf, chunk_size)) != chunk_size)
+				return r;
+			buffer_pos = 0;
+		}
+	}
+	return result;
+}
+
+static void voc_write_silence(unsigned x)
+{
+	unsigned l;
+	char *buf;
+
+	buf = (char *) malloc(chunk_bytes);
+	if (buf == NULL) {
+		error("can't allocate buffer for silence");
+		return;		/* not fatal error */
+	}
+	snd_pcm_format_set_silence(hwparams.format, buf, chunk_size * hwparams.channels);
+	while (x > 0) {
+		l = x;
+		if (l > chunk_size)
+			l = chunk_size;
+		if (voc_pcm_write(buf, l) != (ssize_t)l) {
+			error("write error");
+			exit(EXIT_FAILURE);
+		}
+		x -= l;
+	}
+}
+
+static void voc_pcm_flush(void)
+{
+	if (buffer_pos > 0) {
+		size_t b;
+		if (sleep_min == 0) {
+			if (snd_pcm_format_set_silence(hwparams.format, audiobuf + buffer_pos, chunk_bytes - buffer_pos * 8 / bits_per_sample) < 0)
+				fprintf(stderr, "voc_pcm_flush - silence error");
+			b = chunk_size;
+		} else {
+			b = buffer_pos * 8 / bits_per_frame;
+		}
+		if (pcm_write(audiobuf, b) != (ssize_t)b)
+			error("voc_pcm_flush error");
+	}
+	snd_pcm_drain(handle);
+}
+
+static void voc_play(int fd, int ofs, char *name)
+{
+	int l;
+	VocBlockType *bp;
+	VocVoiceData *vd;
+	VocExtBlock *eb;
+	size_t nextblock, in_buffer;
+	u_char *data, *buf;
+	char was_extended = 0, output = 0;
+	u_short *sp, repeat = 0;
+	size_t silence;
+	int filepos = 0;
+
+#define COUNT(x)	nextblock -= x; in_buffer -= x; data += x
+#define COUNT1(x)	in_buffer -= x; data += x
+
+	data = buf = (u_char *)malloc(64 * 1024);
+	buffer_pos = 0;
+	if (data == NULL) {
+		error("malloc error");
+		exit(EXIT_FAILURE);
+	}
+	if (!quiet_mode) {
+		fprintf(stderr, "Playing Creative Labs Channel file '%s'...\n", name);
+	}
+	/* first we waste the rest of header, ugly but we don't need seek */
+	while (ofs > (ssize_t)chunk_bytes) {
+		if ((size_t)safe_read(fd, buf, chunk_bytes) != chunk_bytes) {
+			error("read error");
+			exit(EXIT_FAILURE);
+		}
+		ofs -= chunk_bytes;
+	}
+	if (ofs) {
+		if (safe_read(fd, buf, ofs) != ofs) {
+			error("read error");
+			exit(EXIT_FAILURE);
+		}
+	}
+	hwparams.format = SND_PCM_FORMAT_U8;
+	hwparams.channels = 1;
+	hwparams.rate = DEFAULT_SPEED;
+	set_params();
+
+	in_buffer = nextblock = 0;
+	while (1) {
+	      Fill_the_buffer:	/* need this for repeat */
+		if (in_buffer < 32) {
+			/* move the rest of buffer to pos 0 and fill the buf up */
+			if (in_buffer)
+				memcpy(buf, data, in_buffer);
+			data = buf;
+			if ((l = safe_read(fd, buf + in_buffer, chunk_bytes - in_buffer)) > 0)
+				in_buffer += l;
+			else if (!in_buffer) {
+				/* the file is truncated, so simulate 'Terminator' 
+				   and reduce the datablock for safe landing */
+				nextblock = buf[0] = 0;
+				if (l == -1) {
+					perror(name);
+					exit(EXIT_FAILURE);
+				}
+			}
+		}
+		while (!nextblock) {	/* this is a new block */
+			if (in_buffer < sizeof(VocBlockType))
+				goto __end;
+			bp = (VocBlockType *) data;
+			COUNT1(sizeof(VocBlockType));
+			nextblock = VOC_DATALEN(bp);
+			if (output && !quiet_mode)
+				fprintf(stderr, "\n");	/* write /n after ASCII-out */
+			output = 0;
+			switch (bp->type) {
+			case 0:
+#if 0
+				d_printf("Terminator\n");
+#endif
+				return;		/* VOC-file stop */
+			case 1:
+				vd = (VocVoiceData *) data;
+				COUNT1(sizeof(VocVoiceData));
+				/* we need a SYNC, before we can set new SPEED, STEREO ... */
+
+				if (!was_extended) {
+					hwparams.rate = (int) (vd->tc);
+					hwparams.rate = 1000000 / (256 - hwparams.rate);
+#if 0
+					d_printf("Channel data %d Hz\n", dsp_speed);
+#endif
+					if (vd->pack) {		/* /dev/dsp can't it */
+						error("can't play packed .voc files");
+						return;
+					}
+					if (hwparams.channels == 2)		/* if we are in Stereo-Mode, switch back */
+						hwparams.channels = 1;
+				} else {	/* there was extended block */
+					hwparams.channels = 2;
+					was_extended = 0;
+				}
+				set_params();
+				break;
+			case 2:	/* nothing to do, pure data */
+#if 0
+				d_printf("Channel continuation\n");
+#endif
+				break;
+			case 3:	/* a silence block, no data, only a count */
+				sp = (u_short *) data;
+				COUNT1(sizeof(u_short));
+				hwparams.rate = (int) (*data);
+				COUNT1(1);
+				hwparams.rate = 1000000 / (256 - hwparams.rate);
+				set_params();
+				silence = (((size_t) * sp) * 1000) / hwparams.rate;
+#if 0
+				d_printf("Silence for %d ms\n", (int) silence);
+#endif
+				voc_write_silence(*sp);
+				break;
+			case 4:	/* a marker for syncronisation, no effect */
+				sp = (u_short *) data;
+				COUNT1(sizeof(u_short));
+#if 0
+				d_printf("Marker %d\n", *sp);
+#endif
+				break;
+			case 5:	/* ASCII text, we copy to stderr */
+				output = 1;
+#if 0
+				d_printf("ASCII - text :\n");
+#endif
+				break;
+			case 6:	/* repeat marker, says repeatcount */
+				/* my specs don't say it: maybe this can be recursive, but
+				   I don't think somebody use it */
+				repeat = *(u_short *) data;
+				COUNT1(sizeof(u_short));
+#if 0
+				d_printf("Repeat loop %d times\n", repeat);
+#endif
+				if (filepos >= 0) {	/* if < 0, one seek fails, why test another */
+					if ((filepos = lseek(fd, 0, 1)) < 0) {
+						error("can't play loops; %s isn't seekable\n", name);
+						repeat = 0;
+					} else {
+						filepos -= in_buffer;	/* set filepos after repeat */
+					}
+				} else {
+					repeat = 0;
+				}
+				break;
+			case 7:	/* ok, lets repeat that be rewinding tape */
+				if (repeat) {
+					if (repeat != 0xFFFF) {
+#if 0
+						d_printf("Repeat loop %d\n", repeat);
+#endif
+						--repeat;
+					}
+#if 0
+					else
+						d_printf("Neverending loop\n");
+#endif
+					lseek(fd, filepos, 0);
+					in_buffer = 0;	/* clear the buffer */
+					goto Fill_the_buffer;
+				}
+#if 0
+				else
+					d_printf("End repeat loop\n");
+#endif
+				break;
+			case 8:	/* the extension to play Stereo, I have SB 1.0 :-( */
+				was_extended = 1;
+				eb = (VocExtBlock *) data;
+				COUNT1(sizeof(VocExtBlock));
+				hwparams.rate = (int) (eb->tc);
+				hwparams.rate = 256000000L / (65536 - hwparams.rate);
+				hwparams.channels = eb->mode == VOC_MODE_STEREO ? 2 : 1;
+				if (hwparams.channels == 2)
+					hwparams.rate = hwparams.rate >> 1;
+				if (eb->pack) {		/* /dev/dsp can't it */
+					error("can't play packed .voc files");
+					return;
+				}
+#if 0
+				d_printf("Extended block %s %d Hz\n",
+					 (eb->mode ? "Stereo" : "Mono"), dsp_speed);
+#endif
+				break;
+			default:
+				error("unknown blocktype %d. terminate.", bp->type);
+				return;
+			}	/* switch (bp->type) */
+		}		/* while (! nextblock)  */
+		/* put nextblock data bytes to dsp */
+		l = in_buffer;
+		if (nextblock < (size_t)l)
+			l = nextblock;
+		if (l) {
+			if (output && !quiet_mode) {
+				if (write(2, data, l) != l) {	/* to stderr */
+					error("write error");
+					exit(EXIT_FAILURE);
+				}
+			} else {
+				if (voc_pcm_write(data, l) != l) {
+					error("write error");
+					exit(EXIT_FAILURE);
+				}
+			}
+			COUNT(l);
+		}
+	}			/* while(1) */
+      __end:
+        voc_pcm_flush();
+        free(buf);
+}
+/* that was a big one, perhaps somebody split it :-) */
+
+/* setting the globals for playing raw data */
+static void init_raw_data(void)
+{
+	hwparams = rhwparams;
+}
+
+/* calculate the data count to read from/to dsp */
+static size_t calc_count(void)
+{
+	size_t count;
+
+	if (!timelimit) {
+		count = (size_t)-1;
+	} else {
+		count = snd_pcm_format_size(hwparams.format,
+					    timelimit * hwparams.rate *
+					    hwparams.channels);
+	}
+	return count < pbrec_count ? count : pbrec_count;
+}
+
+/* write a .VOC-header */
+static void begin_voc(int fd, size_t cnt)
+{
+	VocHeader vh;
+	VocBlockType bt;
+	VocVoiceData vd;
+	VocExtBlock eb;
+
+	strncpy(vh.magic, VOC_MAGIC_STRING, 20);
+	vh.magic[19] = 0x1A;
+	vh.headerlen = sizeof(VocHeader);
+	vh.version = VOC_ACTUAL_VERSION;
+	vh.coded_ver = 0x1233 - VOC_ACTUAL_VERSION;
+
+	if (write(fd, &vh, sizeof(VocHeader)) != sizeof(VocHeader)) {
+		error("write error");
+		exit(EXIT_FAILURE);
+	}
+	if (hwparams.channels > 1) {
+		/* write an extended block */
+		bt.type = 8;
+		bt.datalen = 4;
+		bt.datalen_m = bt.datalen_h = 0;
+		if (write(fd, &bt, sizeof(VocBlockType)) != sizeof(VocBlockType)) {
+			error("write error");
+			exit(EXIT_FAILURE);
+		}
+		eb.tc = (u_short) (65536 - 256000000L / (hwparams.rate << 1));
+		eb.pack = 0;
+		eb.mode = 1;
+		if (write(fd, &eb, sizeof(VocExtBlock)) != sizeof(VocExtBlock)) {
+			error("write error");
+			exit(EXIT_FAILURE);
+		}
+	}
+	bt.type = 1;
+	cnt += sizeof(VocVoiceData);	/* Channel_data block follows */
+	bt.datalen = (u_char) (cnt & 0xFF);
+	bt.datalen_m = (u_char) ((cnt & 0xFF00) >> 8);
+	bt.datalen_h = (u_char) ((cnt & 0xFF0000) >> 16);
+	if (write(fd, &bt, sizeof(VocBlockType)) != sizeof(VocBlockType)) {
+		error("write error");
+		exit(EXIT_FAILURE);
+	}
+	vd.tc = (u_char) (256 - (1000000 / hwparams.rate));
+	vd.pack = 0;
+	if (write(fd, &vd, sizeof(VocVoiceData)) != sizeof(VocVoiceData)) {
+		error("write error");
+		exit(EXIT_FAILURE);
+	}
+}
+
+/* write a WAVE-header */
+static void begin_wave(int fd, size_t cnt)
+{
+	WaveHeader h;
+	WaveFmtBody f;
+	WaveChunkHeader cf, cd;
+	int bits;
+	u_int tmp;
+	u_short tmp2;
+
+	bits = 8;
+	switch ((unsigned long) hwparams.format) {
+	case SND_PCM_FORMAT_U8:
+		bits = 8;
+		break;
+	case SND_PCM_FORMAT_S16_LE:
+		bits = 16;
+		break;
+	case SND_PCM_FORMAT_S32_LE:
+		bits = 32;
+		break;
+	case SND_PCM_FORMAT_S24_LE:
+	case SND_PCM_FORMAT_S24_3LE:
+		bits = 24;
+		break;
+	default:
+		error("Wave doesn't support %s format...", snd_pcm_format_name(hwparams.format));
+		exit(EXIT_FAILURE);
+	}
+	h.magic = WAV_RIFF;
+	tmp = cnt + sizeof(WaveHeader) + sizeof(WaveChunkHeader) + sizeof(WaveFmtBody) + sizeof(WaveChunkHeader) - 8;
+	h.length = LE_INT(tmp);
+	h.type = WAV_WAVE;
+
+	cf.type = WAV_FMT;
+	cf.length = LE_INT(16);
+
+	f.format = LE_SHORT(WAV_PCM_CODE);
+	f.modus = LE_SHORT(hwparams.channels);
+	f.sample_fq = LE_INT(hwparams.rate);
+#if 0
+	tmp2 = (samplesize == 8) ? 1 : 2;
+	f.byte_p_spl = LE_SHORT(tmp2);
+	tmp = dsp_speed * hwparams.channels * (u_int) tmp2;
+#else
+	tmp2 = hwparams.channels * snd_pcm_format_physical_width(hwparams.format) / 8;
+	f.byte_p_spl = LE_SHORT(tmp2);
+	tmp = (u_int) tmp2 * hwparams.rate;
+#endif
+	f.byte_p_sec = LE_INT(tmp);
+	f.bit_p_spl = LE_SHORT(bits);
+
+	cd.type = WAV_DATA;
+	cd.length = LE_INT(cnt);
+
+	if (write(fd, &h, sizeof(WaveHeader)) != sizeof(WaveHeader) ||
+	    write(fd, &cf, sizeof(WaveChunkHeader)) != sizeof(WaveChunkHeader) ||
+	    write(fd, &f, sizeof(WaveFmtBody)) != sizeof(WaveFmtBody) ||
+	    write(fd, &cd, sizeof(WaveChunkHeader)) != sizeof(WaveChunkHeader)) {
+		error("write error");
+		exit(EXIT_FAILURE);
+	}
+}
+
+/* write a Au-header */
+static void begin_au(int fd, size_t cnt)
+{
+	AuHeader ah;
+
+	ah.magic = AU_MAGIC;
+	ah.hdr_size = BE_INT(24);
+	ah.data_size = BE_INT(cnt);
+	switch ((unsigned long) hwparams.format) {
+	case SND_PCM_FORMAT_MU_LAW:
+		ah.encoding = BE_INT(AU_FMT_ULAW);
+		break;
+	case SND_PCM_FORMAT_U8:
+		ah.encoding = BE_INT(AU_FMT_LIN8);
+		break;
+	case SND_PCM_FORMAT_S16_BE:
+		ah.encoding = BE_INT(AU_FMT_LIN16);
+		break;
+	default:
+		error("Sparc Audio doesn't support %s format...", snd_pcm_format_name(hwparams.format));
+		exit(EXIT_FAILURE);
+	}
+	ah.sample_rate = BE_INT(hwparams.rate);
+	ah.channels = BE_INT(hwparams.channels);
+	if (write(fd, &ah, sizeof(AuHeader)) != sizeof(AuHeader)) {
+		error("write error");
+		exit(EXIT_FAILURE);
+	}
+}
+
+/* closing .VOC */
+static void end_voc(int fd)
+{
+	off_t length_seek;
+	VocBlockType bt;
+	size_t cnt;
+	char dummy = 0;		/* Write a Terminator */
+
+	if (write(fd, &dummy, 1) != 1) {
+		error("write error");
+		exit(EXIT_FAILURE);
+	}
+	length_seek = sizeof(VocHeader);
+	if (hwparams.channels > 1)
+		length_seek += sizeof(VocBlockType) + sizeof(VocExtBlock);
+	bt.type = 1;
+	cnt = fdcount;
+	cnt += sizeof(VocVoiceData);	/* Channel_data block follows */
+	if (cnt > 0x00ffffff)
+		cnt = 0x00ffffff;
+	bt.datalen = (u_char) (cnt & 0xFF);
+	bt.datalen_m = (u_char) ((cnt & 0xFF00) >> 8);
+	bt.datalen_h = (u_char) ((cnt & 0xFF0000) >> 16);
+	if (lseek(fd, length_seek, SEEK_SET) == length_seek)
+		write(fd, &bt, sizeof(VocBlockType));
+	if (fd != 1)
+		close(fd);
+}
+
+static void end_raw(int fd)
+{                              /* REALLY only close output */
+       if (fd != 1)
+               close(fd);
+}
+
+static void end_wave(int fd)
+{				/* only close output */
+	WaveChunkHeader cd;
+	off_t length_seek;
+	u_int rifflen;
+	
+	length_seek = sizeof(WaveHeader) +
+		      sizeof(WaveChunkHeader) +
+		      sizeof(WaveFmtBody);
+	cd.type = WAV_DATA;
+	cd.length = fdcount > 0x7fffffff ? 0x7fffffff : LE_INT(fdcount);
+	rifflen = fdcount + 2*sizeof(WaveChunkHeader) + sizeof(WaveFmtBody) + 4;
+	rifflen = rifflen > 0x7fffffff ? 0x7fffffff : LE_INT(rifflen);
+	if (lseek(fd, 4, SEEK_SET) == 4)
+		write(fd, &rifflen, 4);
+	if (lseek(fd, length_seek, SEEK_SET) == length_seek)
+		write(fd, &cd, sizeof(WaveChunkHeader));
+	if (fd != 1)
+		close(fd);
+}
+
+static void end_au(int fd)
+{				/* only close output */
+	AuHeader ah;
+	off_t length_seek;
+	
+	length_seek = (char *)&ah.data_size - (char *)&ah;
+	ah.data_size = fdcount > 0xffffffff ? 0xffffffff : BE_INT(fdcount);
+	if (lseek(fd, length_seek, SEEK_SET) == length_seek)
+		write(fd, &ah.data_size, sizeof(ah.data_size));
+	if (fd != 1)
+		close(fd);
+}
+
+static void header(int rtype, char *name)
+{
+	if (!quiet_mode) {
+		fprintf(stderr, "%s %s '%s' : ",
+			(stream == SND_PCM_STREAM_PLAYBACK) ? "Playing" : "Recording",
+			fmt_rec_table[rtype].what,
+			name);
+		fprintf(stderr, "%s, ", snd_pcm_format_description(hwparams.format));
+		fprintf(stderr, "Rate %d Hz, ", hwparams.rate);
+		if (hwparams.channels == 1)
+			fprintf(stderr, "Mono");
+		else if (hwparams.channels == 2)
+			fprintf(stderr, "Stereo");
+		else
+			fprintf(stderr, "Channels %i", hwparams.channels);
+		fprintf(stderr, "\n");
+	}
+}
+
+/* playing raw data */
+
+void playback_go(int fd, size_t loaded, size_t count, int rtype, char *name)
+{
+	int l, r;
+	size_t written = 0;
+	size_t c;
+
+	header(rtype, name);
+	set_params();
+
+	while (loaded > chunk_bytes && written < count) {
+		if (pcm_write(audiobuf + written, chunk_size) <= 0)
+			return;
+		written += chunk_bytes;
+		loaded -= chunk_bytes;
+	}
+	if (written > 0 && loaded > 0)
+		memmove(audiobuf, audiobuf + written, loaded);
+
+	l = loaded;
+	while (written < count) {
+		do {
+			c = count - written;
+			if (c > chunk_bytes)
+				c = chunk_bytes;
+			c -= l;
+
+			if (c == 0)
+				break;
+			r = safe_read(fd, audiobuf + l, c);
+			if (r < 0) {
+				perror(name);
+				exit(EXIT_FAILURE);
+			}
+			fdcount += r;
+			if (r == 0)
+				break;
+			l += r;
+		} while (sleep_min == 0 && (size_t)l < chunk_bytes);
+		l = l * 8 / bits_per_frame;
+		r = pcm_write(audiobuf, l);
+		if (r != l)
+			break;
+		r = r * bits_per_frame / 8;
+		written += r;
+		l = 0;
+	}
+	snd_pcm_drain(handle);
+}
+
+/* capturing raw data, this proc handels WAVE files and .VOCs (as one block) */
+
+void capture_go(int fd, size_t count, int rtype, char *name)
+{
+	size_t c;
+	ssize_t r, err;
+
+	header(rtype, name);
+	set_params();
+
+	while (count > 0) {
+		c = count;
+		if (c > chunk_bytes)
+			c = chunk_bytes;
+		c = c * 8 / bits_per_frame;
+		if ((size_t)(r = pcm_read(audiobuf, c)) != c)
+			break;
+		r = r * bits_per_frame / 8;
+		if ((err = write(fd, audiobuf, r)) != r) {
+			perror(name);
+			exit(EXIT_FAILURE);
+		}
+		if (err > 0)
+			fdcount += err;
+		count -= r;
+	}
+}
+
+/*
+ *  let's play or capture it (capture_type says VOC/WAVE/raw)
+ */
+
+static void playback(char *name)
+{
+	int ofs;
+	size_t dta;
+	ssize_t dtawave;
+
+	fdcount = 0;
+	if (!name || !strcmp(name, "-")) {
+		fd = fileno(stdin);
+		name = "stdin";
+	} else {
+		if ((fd = open(name, O_RDONLY, 0)) == -1) {
+			perror(name);
+			exit(EXIT_FAILURE);
+		}
+	}
+	/* read the file header */
+	dta = sizeof(AuHeader);
+	if ((size_t)safe_read(fd, audiobuf, dta) != dta) {
+		error("read error");
+		exit(EXIT_FAILURE);
+	}
+	if (test_au(fd, audiobuf) >= 0) {
+		rhwparams.format = SND_PCM_FORMAT_MU_LAW;
+		pbrec_count = calc_count();
+		playback_go(fd, 0, pbrec_count, FORMAT_AU, name);
+		goto __end;
+	}
+	dta = sizeof(VocHeader);
+	if ((size_t)safe_read(fd, audiobuf + sizeof(AuHeader),
+		 dta - sizeof(AuHeader)) != dta - sizeof(AuHeader)) {
+		error("read error");
+		exit(EXIT_FAILURE);
+	}
+	if ((ofs = test_vocfile(audiobuf)) >= 0) {
+		pbrec_count = calc_count();
+		voc_play(fd, ofs, name);
+		goto __end;
+	}
+	/* read bytes for WAVE-header */
+	if ((dtawave = test_wavefile(fd, audiobuf, dta)) >= 0) {
+		pbrec_count = calc_count();
+		playback_go(fd, dtawave, pbrec_count, FORMAT_WAVE, name);
+	} else {
+		/* should be raw data */
+		init_raw_data();
+		pbrec_count = calc_count();
+		playback_go(fd, dta, pbrec_count, FORMAT_RAW, name);
+	}
+      __end:
+	if (fd != 0)
+		close(fd);
+}
+
+static void capture(char *name)
+{
+	if (!name || !strcmp(name, "-")) {
+		fd = fileno(stdout);
+		name = "stdout";
+	} else {
+		remove(name);
+		if ((fd = open(name, O_WRONLY | O_CREAT, 0644)) == -1) {
+			perror(name);
+			exit(EXIT_FAILURE);
+		}
+	}
+	fdcount = 0;
+	pbrec_count = calc_count();
+	/* WAVE-file should be even (I'm not sure), but wasting one byte
+	   isn't a problem (this can only be in 8 bit mono) */
+	pbrec_count += pbrec_count % 2;
+	if (pbrec_count == 0)
+		pbrec_count -= 2;
+	if (fmt_rec_table[file_type].start)
+		fmt_rec_table[file_type].start(fd, pbrec_count);
+	capture_go(fd, pbrec_count, file_type, name);
+	fmt_rec_table[file_type].end(fd);
+}
+
+void playbackv_go(int* fds, unsigned int channels, size_t loaded, size_t count, int rtype, char **names)
+{
+	int r;
+	size_t vsize;
+
+	unsigned int channel;
+	u_char *bufs[channels];
+
+	header(rtype, names[0]);
+	set_params();
+
+	vsize = chunk_bytes / channels;
+
+	// Not yet implemented
+	assert(loaded == 0);
+
+	for (channel = 0; channel < channels; ++channel)
+		bufs[channel] = audiobuf + vsize * channel;
+
+	while (count > 0) {
+		size_t c = 0;
+		size_t expected = count / channels;
+		if (expected > vsize)
+			expected = vsize;
+		do {
+			r = safe_read(fds[0], bufs[0], expected);
+			if (r < 0) {
+				perror(names[channel]);
+				exit(EXIT_FAILURE);
+			}
+			for (channel = 1; channel < channels; ++channel) {
+				if (safe_read(fds[channel], bufs[channel], r) != r) {
+					perror(names[channel]);
+					exit(EXIT_FAILURE);
+				}
+			}
+			if (r == 0)
+				break;
+			c += r;
+		} while (sleep_min == 0 && c < expected);
+		c = c * 8 / bits_per_sample;
+		r = pcm_writev(bufs, channels, c);
+		if ((size_t)r != c)
+			break;
+		r = r * bits_per_frame / 8;
+		count -= r;
+	}
+	snd_pcm_drain(handle);
+}
+
+void capturev_go(int* fds, unsigned int channels, size_t count, int rtype, char **names)
+{
+	size_t c;
+	ssize_t r;
+	unsigned int channel;
+	size_t vsize;
+	u_char *bufs[channels];
+
+	header(rtype, names[0]);
+	set_params();
+
+	vsize = chunk_bytes / channels;
+
+	for (channel = 0; channel < channels; ++channel)
+		bufs[channel] = audiobuf + vsize * channel;
+
+	while (count > 0) {
+		size_t rv;
+		c = count;
+		if (c > chunk_bytes)
+			c = chunk_bytes;
+		c = c * 8 / bits_per_frame;
+		if ((size_t)(r = pcm_readv(bufs, channels, c)) != c)
+			break;
+		rv = r * bits_per_sample / 8;
+		for (channel = 0; channel < channels; ++channel) {
+			if ((size_t)write(fds[channel], bufs[channel], rv) != rv) {
+				perror(names[channel]);
+				exit(EXIT_FAILURE);
+			}
+		}
+		r = r * bits_per_frame / 8;
+		count -= r;
+		fdcount += r;
+	}
+}
+
+static void playbackv(char **names, unsigned int count)
+{
+	int ret = 0;
+	unsigned int channel;
+	unsigned int channels = rhwparams.channels;
+	int alloced = 0;
+	int fds[channels];
+	for (channel = 0; channel < channels; ++channel)
+		fds[channel] = -1;
+
+	if (count == 1 && channels > 1) {
+		size_t len = strlen(names[0]);
+		char format[1024];
+		memcpy(format, names[0], len);
+		strcpy(format + len, ".%d");
+		len += 4;
+		names = malloc(sizeof(*names) * channels);
+		for (channel = 0; channel < channels; ++channel) {
+			names[channel] = malloc(len);
+			sprintf(names[channel], format, channel);
+		}
+		alloced = 1;
+	} else if (count != channels) {
+		error("You need to specify %d files", channels);
+		exit(EXIT_FAILURE);
+	}
+
+	for (channel = 0; channel < channels; ++channel) {
+		fds[channel] = open(names[channel], O_RDONLY, 0);
+		if (fds[channel] < 0) {
+			perror(names[channel]);
+			ret = EXIT_FAILURE;
+			goto __end;
+		}
+	}
+	/* should be raw data */
+	init_raw_data();
+	pbrec_count = calc_count();
+	playbackv_go(fds, channels, 0, pbrec_count, FORMAT_RAW, names);
+
+      __end:
+	for (channel = 0; channel < channels; ++channel) {
+		if (fds[channel] >= 0)
+			close(fds[channel]);
+		if (alloced)
+			free(names[channel]);
+	}
+	if (alloced)
+		free(names);
+	if (ret)
+		exit(ret);
+}
+
+static void capturev(char **names, unsigned int count)
+{
+	int ret = 0;
+	unsigned int channel;
+	unsigned int channels = rhwparams.channels;
+	int alloced = 0;
+	int fds[channels];
+	for (channel = 0; channel < channels; ++channel)
+		fds[channel] = -1;
+
+	if (count == 1) {
+		size_t len = strlen(names[0]);
+		char format[1024];
+		memcpy(format, names[0], len);
+		strcpy(format + len, ".%d");
+		len += 4;
+		names = malloc(sizeof(*names) * channels);
+		for (channel = 0; channel < channels; ++channel) {
+			names[channel] = malloc(len);
+			sprintf(names[channel], format, channel);
+		}
+		alloced = 1;
+	} else if (count != channels) {
+		error("You need to specify %d files", channels);
+		exit(EXIT_FAILURE);
+	}
+
+	for (channel = 0; channel < channels; ++channel) {
+		fds[channel] = open(names[channel], O_WRONLY + O_CREAT, 0644);
+		if (fds[channel] < 0) {
+			perror(names[channel]);
+			ret = EXIT_FAILURE;
+			goto __end;
+		}
+	}
+	/* should be raw data */
+	init_raw_data();
+	pbrec_count = calc_count();
+	capturev_go(fds, channels, pbrec_count, FORMAT_RAW, names);
+
+      __end:
+	for (channel = 0; channel < channels; ++channel) {
+		if (fds[channel] >= 0)
+			close(fds[channel]);
+		if (alloced)
+			free(names[channel]);
+	}
+	if (alloced)
+		free(names);
+	if (ret)
+		exit(ret);
+}
Index: debian/alsa-utils/aplay/arecord.1
diff -u debian/alsa-utils/aplay/arecord.1:1.3 debian/alsa-utils/aplay/arecord.1:1.4
--- debian/alsa-utils/aplay/arecord.1:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/aplay/arecord.1	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,143 @@
+.TH APLAY 1 "2 August 2001"
+.SH NAME
+arecord, aplay \- command-line sound recorder and player for ALSA 
+soundcard driver
+.SH SYNOPSIS
+\fBarecord\fP [\fIflags\fP] [filename]
+.SH SYNOPSIS
+\fBaplay\fP [\fIflags\fP] [filename [filename]] ...
+
+.SH DESCRIPTION
+\fBarecord\fP is a command-line soundfile recorder for the ALSA soundcard
+driver. It supports several file formats and multiple soundcards with
+multiple devices. 
+
+\fBaplay\fP is much the same, only it plays instead of recording. For
+supported soundfile formats, the sampling rate, bit depth, and so
+forth can be automatically determined from the soundfile header.
+
+.SH INVOKING
+
+[\fBarecord\fP | \fBaplay\fP ] [\fIflags\fP] filename
+.TP
+If filename is not specified, the standard output or input is used. The \fBaplay\fP utility accepts multiple filenames.
+
+
+.SS Options
+.TP
+\fI--help\fP
+Help: show syntax.
+.TP
+\fI--version\fP
+Print current version.
+.TP
+\fI-l, --list-devices\fP
+List all soundcards and digital audio devices
+.TP
+\fI-L, --list-pcms\fP
+List all PCMs defined
+.TP
+\fI-D, --device=NAME\fP
+Select PCM by name
+.TP
+\fI-q --quiet\fP
+Quiet mode. Suppress messages (not sound :))
+.TP
+\fI-t, --file-type TYPE\fP
+File type (voc, wav, raw or au)
+.TP
+\fI-c, --channels=#\fP
+The number of channels
+.TP
+\fI-f --format=FORMAT\fP
+Sample format
+.br
+Recognized sample formats are: S8 U8 S16_LE S16_BE U16_LE U16_BE S24_LE
+S24_BE U24_LE U24_BE S32_LE S32_BE U32_LE U32_BE FLOAT_LE FLOAT_BE
+FLOAT64_LE FLOAT64_BE IEC958_SUBFRAME_LE IEC958_SUBFRAME_BE MU_LAW
+A_LAW IMA_ADPCM MPEG GSM
+.br
+Some of these may not be available on selected hardware
+.br
+There are also two format shortcuts available:
+.nf
+-f cd (16 bit little endian, 44100, stereo [-f S16_LE -c2 -r44100]
+-f dat (16 bit little endian, 48000, stereo) [-f S16_LE -c2 -r48000]
+.fi
+.TP
+\fI-r, --rate=#<Hz>\fP
+Sampling rate in Hertz.
+.TP
+\fI-d, --duration=#\fP
+Interrupt after # seconds
+.TP
+\fI-s, --sleep-min=#\fP
+Min ticks to sleep
+.TP
+\fI-M, --mmap\fP            
+Mmap stream
+.TP
+\fI-N, --nonblock\fP          
+Nonblocking mode
+.TP
+\fI-F, --period-time=#\fP     
+Distance between interrupts is # microseconds
+.TP
+\fI-B, --buffer-time=#\fP     
+Buffer duration is # microseconds
+.TP
+\fI-A, --avail-min=#\fP       
+Min available space for wakeup is # microseconds
+.TP
+\fI-R, --start-delay=#\fP     
+Delay for automatic PCM start is # microseconds 
+(relative to buffer size if <= 0)
+.TP
+\fI-T, --stop-delay=#\fP      
+Delay for automatic PCM stop is # microseconds from xrun
+.TP
+\fI-v, --verbose\fP           
+Show PCM structure and setup
+.TP
+\fI-I, --separate-channels\fP 
+One file for each channel
+.TP
+
+.SS
+Example: 
+
+.RS
+\fBaplay -c 1 -t raw -r 22050 -f mu_law foobar\fR
+
+.ID
+will play the raw file "foobar" as a
+22050-Hz, mono, 8-bit, Mu-Law .au file. 
+
+\fBarecord -d 10 -f cd -t wav -D copy foobar.wav\fP
+
+will record foobar.wav as a 10-second, CD-quality wave file, using the
+PCM "copy" (which might be defined in the user's .asoundrc file as:
+.nf
+pcm.copy {
+  type plug
+  slave {
+    pcm hw
+  }
+  route_policy copy
+}
+.fi
+
+.SH SEE ALSO
+\fB
+alsamixer(1),
+amixer(1)
+\fP
+
+.SH BUGS 
+Note that .aiff files are not currently supported.
+
+.SH AUTHOR
+\fBarecord\fP and \fBaplay\fP are by Jaroslav Kysela <perex@suse.cz>
+This document is by Paul Winkler <zarmzarm@erols.com>.
+Updated for Alsa 0.9 by James Tappin <james@xena.uklinux.net>
+
Index: debian/alsa-utils/aplay/formats.h
diff -u debian/alsa-utils/aplay/formats.h:1.3 debian/alsa-utils/aplay/formats.h:1.4
--- debian/alsa-utils/aplay/formats.h:1.3	Tue Feb  3 20:43:42 2004
+++ debian/alsa-utils/aplay/formats.h	Tue Feb  3 20:51:59 2004
@@ -0,0 +1,110 @@
+#ifndef FORMATS_H
+#define FORMATS_H		1
+
+#include <endian.h>
+#include <byteswap.h>
+
+/* Definitions for .VOC files */
+
+#define VOC_MAGIC_STRING	"Creative Voice File\0x1A"
+#define VOC_ACTUAL_VERSION	0x010A
+#define VOC_SAMPLESIZE		8
+
+#define VOC_MODE_MONO		0
+#define VOC_MODE_STEREO		1
+
+#define VOC_DATALEN(bp)		((u_long)(bp->datalen) | \
+                         	((u_long)(bp->datalen_m) << 8) | \
+                         	((u_long)(bp->datalen_h) << 16) )
+
+typedef struct voc_header {
+	u_char magic[20];	/* must be MAGIC_STRING */
+	u_short headerlen;	/* Headerlength, should be 0x1A */
+	u_short version;	/* VOC-file version */
+	u_short coded_ver;	/* 0x1233-version */
+} VocHeader;
+
+typedef struct voc_blocktype {
+	u_char type;
+	u_char datalen;		/* low-byte    */
+	u_char datalen_m;	/* medium-byte */
+	u_char datalen_h;	/* high-byte   */
+} VocBlockType;
+
+typedef struct voc_voice_data {
+	u_char tc;
+	u_char pack;
+} VocVoiceData;
+
+typedef struct voc_ext_block {
+	u_short tc;
+	u_char pack;
+	u_char mode;
+} VocExtBlock;
+
+/* Definitions for Microsoft WAVE format */
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define COMPOSE_ID(a,b,c,d)	((a) | ((b)<<8) | ((c)<<16) | ((d)<<24))
+#define LE_SHORT(v)		(v)
+#define LE_INT(v)		(v)
+#define BE_SHORT(v)		bswap_16(v)
+#define BE_INT(v)		bswap_32(v)
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define COMPOSE_ID(a,b,c,d)	((d) | ((c)<<8) | ((b)<<16) | ((a)<<24))
+#define LE_SHORT(v)		bswap_16(v)
+#define LE_INT(v)		bswap_32(v)
+#define BE_SHORT(v)		(v)
+#define BE_INT(v)		(v)
+#else
+#error "Wrong endian"
+#endif
+
+#define WAV_RIFF		COMPOSE_ID('R','I','F','F')
+#define WAV_WAVE		COMPOSE_ID('W','A','V','E')
+#define WAV_FMT			COMPOSE_ID('f','m','t',' ')
+#define WAV_DATA		COMPOSE_ID('d','a','t','a')
+#define WAV_PCM_CODE		1
+
+/* it's in chunks like .voc and AMIGA iff, but my source say there
+   are in only in this combination, so I combined them in one header;
+   it works on all WAVE-file I have
+ */
+typedef struct {
+	u_int magic;		/* 'RIFF' */
+	u_int length;		/* filelen */
+	u_int type;		/* 'WAVE' */
+} WaveHeader;
+
+typedef struct {
+	u_short format;		/* should be 1 for PCM-code */
+	u_short modus;		/* 1 Mono, 2 Stereo */
+	u_int sample_fq;	/* frequence of sample */
+	u_int byte_p_sec;
+	u_short byte_p_spl;	/* samplesize; 1 or 2 bytes */
+	u_short bit_p_spl;	/* 8, 12 or 16 bit */
+} WaveFmtBody;
+
+typedef struct {
+	u_int type;		/* 'data' */
+	u_int length;		/* samplecount */
+} WaveChunkHeader;
+
+/* Definitions for Sparc .au header */
+
+#define AU_MAGIC		COMPOSE_ID('.','s','n','d')
+
+#define AU_FMT_ULAW		1
+#define AU_FMT_LIN8		2
+#define AU_FMT_LIN16		3
+
+typedef struct au_header {
+	u_int magic;		/* '.snd' */
+	u_int hdr_size;		/* size of header (min 24) */
+	u_int data_size;	/* size of data */
+	u_int encoding;		/* see to AU_FMT_XXXX */
+	u_int sample_rate;	/* sample rate */
+	u_int channels;		/* number of channels (voices) */
+} AuHeader;
+
+#endif				/* FORMATS */
Index: debian/alsa-utils/configure
diff -u debian/alsa-utils/configure:1.3 debian/alsa-utils/configure:1.4
--- debian/alsa-utils/configure:1.3	Tue Feb  3 20:37:57 2004
+++ debian/alsa-utils/configure	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,4085 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by Autoconf 2.52.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# 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
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+# 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"
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+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
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export 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
+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}
+
+ac_unique_file="alsamixer/alsamixer.c"
+ac_default_prefix=/usr
+
+# 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'
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+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)
+    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 path 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 path 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.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: should be removed in autoconf 3.0.
+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_prog=$0
+  ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  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 in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+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 <<EOF
+\`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 \`..']
+
+EOF
+
+  cat <<EOF
+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]
+EOF
+
+  cat <<\EOF
+
+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
+EOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\EOF
+
+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)
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  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.
+
+EOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
+    cd $ac_subdir
+    # A "../" for each directory in /$ac_subdir.
+    ac_dots=`echo $ac_subdir |
+             sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
+
+    case $srcdir in
+    .) # No --srcdir option.  We are building in place.
+      ac_sub_srcdir=$srcdir ;;
+    [\\/]* | ?:[\\/]* ) # Absolute path.
+      ac_sub_srcdir=$srcdir/$ac_subdir ;;
+    *) # Relative path.
+      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+    esac
+
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_sub_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_sub_srcdir/configure; then
+      echo
+      $SHELL $ac_sub_srcdir/configure  --help=recursive
+    elif test -f $ac_sub_srcdir/configure.ac ||
+           test -f $ac_sub_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\EOF
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+EOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<EOF
+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.52.  Invocation command line was
+
+  $ $0 $@
+
+EOF
+{
+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`
+
+PATH = $PATH
+
+_ASUNAME
+} >&5
+
+cat >&5 <<EOF
+## ------------ ##
+## Core tests.  ##
+## ------------ ##
+
+EOF
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+  case $ac_arg in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+    ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+    ac_sep=" " ;;
+  *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
+     ac_sep=" " ;;
+  esac
+  # Get rid of the leading space.
+done
+
+# 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.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  echo >&5
+  echo "## ----------------- ##" >&5
+  echo "## Cache variables.  ##" >&5
+  echo "## ----------------- ##" >&5
+  echo >&5
+  # 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;
+} >&5
+  sed "/^$/d" confdefs.h >conftest.log
+  if test -s conftest.log; then
+    echo >&5
+    echo "## ------------ ##" >&5
+    echo "## confdefs.h.  ##" >&5
+    echo "## ------------ ##" >&5
+    echo >&5
+    cat conftest.log >&5
+  fi
+  (echo; echo) >&5
+  test "$ac_signal" != 0 &&
+    echo "$as_me: caught signal $ac_signal" >&5
+  echo "$as_me: exit $exit_status" >&5
+  rm -rf conftest* confdefs* core core.* *.core 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
+
+# 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:838: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    cat "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:849: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:857: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# 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:873: 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:877: 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:883: 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:885:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+        { echo "$as_me:887:   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.  It doesn't matter if
+  # we pass some twice (in addition to the command line arguments).
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
+       ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:906: 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:908: 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
+
+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
+echo "#! $SHELL" >conftest.sh
+echo  "exit 0"   >>conftest.sh
+chmod +x conftest.sh
+if { (echo "$as_me:928: PATH=\".;.\"; conftest.sh") >&5
+  (PATH=".;."; conftest.sh) 2>&5
+  ac_status=$?
+  echo "$as_me:931: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  ac_path_separator=';'
+else
+  ac_path_separator=:
+fi
+PATH_SEPARATOR="$ac_path_separator"
+rm -f conftest.sh
+
+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:957: 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:977: 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
+    ac_save_IFS=$IFS; IFS=$ac_path_separator
+  for ac_dir in $PATH; do
+    IFS=$ac_save_IFS
+    # Account for people who put trailing slashes in PATH elements.
+    case $ac_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
+        if $as_executable_p "$ac_dir/$ac_prog"; then
+	  if test $ac_prog = install &&
+            grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$ac_dir/$ac_prog -c"
+	    break 2
+	  fi
+	fi
+      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:1026: 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:1037: 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:1061: 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:1074: 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:1080: 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=`CDPATH=:; 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=
+  am_backtick='`'
+  { echo "$as_me:1105: WARNING: ${am_backtick}missing' script is too old or missing" >&5
+echo "$as_me: WARNING: ${am_backtick}missing' script is too old or missing" >&2;}
+fi
+
+for ac_prog in mawk gawk 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:1113: 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
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_AWK="$ac_prog"
+echo "$as_me:1128: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  echo "$as_me:1136: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+  echo "$as_me:1139: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AWK" && break
+done
+
+echo "$as_me:1146: 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 <<\EOF
+all:
+	@echo 'ac_maketemp="${MAKE}"'
+EOF
+# 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:1166: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:1170: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# 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
+
+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
+
+# test to see if srcdir already configured
+if test "`CDPATH=:; cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:1206: 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
+
+# Define the identity of the package.
+PACKAGE=alsa-utils
+VERSION=0.9.1
+
+cat >>confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >>confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
+# the ones we care about.
+
+# Autoconf 2.50 always computes EXEEXT.  However we need to be
+# compatible with 2.13, for now.  So we always define EXEEXT, but we
+# don't compute it.
+
+# Similar for OBJEXT -- only we only use OBJEXT if the user actually
+# requests that it be used.  This is a bit dumb.
+: ${OBJEXT=o}
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal"}
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake"}
+
+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"}
+
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+
+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:1263: 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_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}gcc"
+echo "$as_me:1278: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1286: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1289: 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:1298: 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
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="gcc"
+echo "$as_me:1313: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1321: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1324: 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:1337: 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_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}cc"
+echo "$as_me:1352: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1360: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1363: 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:1372: 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
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="cc"
+echo "$as_me:1387: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1395: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1398: 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:1411: 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
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+  ac_prog_rejected=yes
+  continue
+fi
+ac_cv_prog_CC="cc"
+echo "$as_me:1431: found $ac_dir/$ac_word" >&5
+break
+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
+    set dummy "$ac_dir/$ac_word" ${1+"$@"}
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1453: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1456: 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:1467: 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_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+echo "$as_me:1482: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1490: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1493: 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:1506: 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
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="$ac_prog"
+echo "$as_me:1521: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1529: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1532: 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:1544: error: no acceptable cc found in \$PATH" >&5
+echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:1549:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:1552: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1555: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:1557: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1560: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:1562: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:1565: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 1569 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# 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:1585: 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:1588: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:1591: \$? = $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.
+for ac_file in `ls a.exe conftest.exe 2>/dev/null;
+                ls a.out conftest 2>/dev/null;
+                ls a.* conftest.* 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    a.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 --akim.
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1614: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:1620: 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:1625: 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:1631: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1634: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:1641: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:1649: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext
+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:1656: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:1658: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:1661: checking for executable suffix" >&5
+echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
+if { (eval echo "$as_me:1663: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:1666: \$? = $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 `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:1682: error: cannot compute EXEEXT: cannot compile and link" >&5
+echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:1688: 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:1694: checking for object suffix" >&5
+echo $ECHO_N "checking for object suffix... $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 1700 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:1712: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1715: \$? = $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 ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1727: error: cannot compute OBJEXT: cannot compile" >&5
+echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:1734: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:1738: 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 1744 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1759: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1762: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1765: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1768: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat 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:1780: 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:1786: 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 1792 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1804: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1807: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1810: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1813: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:1823: 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
+# 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:1850: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1853: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1856: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1859: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   ''\
+   '#include <stdlib.h>' \
+   '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 1871 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1884: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1887: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1890: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1893: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1903 "configure"
+#include "confdefs.h"
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1915: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1918: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1921: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1924: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+cat 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
+cat 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
+
+ac_config_commands="$ac_config_commands default-1"
+
+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:1959: 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 | fgrep -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:1986: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:1992: 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 conftest.c -o conftest.o >/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:2054: 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"
+
+# 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:2070: 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
+    ac_save_IFS=$IFS; IFS=$ac_path_separator
+  for ac_dir in $PATH; do
+    IFS=$ac_save_IFS
+    # Account for people who put trailing slashes in PATH elements.
+    case $ac_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
+        if $as_executable_p "$ac_dir/$ac_prog"; then
+	  if test $ac_prog = install &&
+            grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$ac_dir/$ac_prog -c"
+	    break 2
+	  fi
+	fi
+      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:2119: 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:2130: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:2134: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:2137: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+alsa_save_CFLAGS="$CFLAGS"
+alsa_save_LDFLAGS="$LDFLAGS"
+alsa_save_LIBS="$LIBS"
+alsa_found=yes
+
+# 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:2170: 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:2176: result: $ALSA_CFLAGS" >&5
+echo "${ECHO_T}$ALSA_CFLAGS" >&6
+
+echo "$as_me:2179: 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"
+	LDFLAGS="$LDFLAGS $ALSA_LIBS"
+fi
+
+ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread"
+LIBS=`echo $LIBS | sed 's/-lm//'`
+LIBS=`echo $LIBS | sed 's/-ldl//'`
+LIBS=`echo $LIBS | sed 's/-lpthread//'`
+LIBS=`echo $LIBS | sed 's/  //'`
+LIBS="$ALSA_LIBS $LIBS"
+echo "$as_me:2192: result: $ALSA_LIBS" >&5
+echo "${ECHO_T}$ALSA_LIBS" >&6
+
+min_alsa_version=0.9.0
+echo "$as_me:2196: 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/'`
+
+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
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 2213 "configure"
+#include "confdefs.h"
+
+#include <alsa/asoundlib.h>
+
+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:2259: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2262: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2265: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2268: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  echo "$as_me:2270: result: found." >&5
+echo "${ECHO_T}found." >&6
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:2275: result: not present." >&5
+echo "${ECHO_T}not present." >&6
+   { { echo "$as_me:2277: error: Sufficiently new version of libasound not found." >&5
+echo "$as_me: error: Sufficiently new version of libasound not found." >&2;}
+   { (exit 1); exit 1; }; }
+   alsa_found=no
+
+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
+
+echo "$as_me:2290: 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 2298 "configure"
+#include "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:2317: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2320: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:2323: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2326: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_asound_snd_ctl_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat 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:2337: 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 <<EOF
+#define HAVE_LIBASOUND 1
+EOF
+
+  LIBS="-lasound $LIBS"
+
+else
+  { { echo "$as_me:2347: error: No linkable libasound was found." >&5
+echo "$as_me: error: No linkable libasound was found." >&2;}
+   { (exit 1); exit 1; }; }
+	 alsa_found=no
+
+fi
+
+if test "x$alsa_found" = "xyes" ; then
+   :
+   LIBS=`echo $LIBS | sed 's/-lasound//g'`
+   LIBS=`echo $LIBS | sed 's/  //'`
+   LIBS="-lasound $LIBS"
+fi
+if test "x$alsa_found" = "xno" ; then
+   :
+   CFLAGS="$alsa_save_CFLAGS"
+   LDFLAGS="$alsa_save_LDFLAGS"
+   LIBS="$alsa_save_LIBS"
+   ALSA_CFLAGS=""
+   ALSA_LIBS=""
+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:2374: 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.
+  # 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 2395 "configure"
+#include "confdefs.h"
+#include <assert.h>
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:2400: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2406: \$? = $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
+  cat 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 2429 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:2433: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2439: \$? = $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
+  cat 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:2476: 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.
+  # 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 2486 "configure"
+#include "confdefs.h"
+#include <assert.h>
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:2491: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2497: \$? = $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
+  cat 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 2520 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:2524: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2530: \$? = $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
+  cat 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:2558: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&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:2569: 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 2575 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:2583: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2589: \$? = $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_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_header_stdc=no
+fi
+rm -f conftest.err 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 2611 "configure"
+#include "confdefs.h"
+#include <string.h>
+
+_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 2629 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+
+_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 2650 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#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:2676: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2679: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:2681: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2684: \$? = $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
+cat conftest.$ac_ext >&5
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:2697: 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 <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+echo "$as_me:2707: checking for initscr in -lncurses" >&5
+echo $ECHO_N "checking for initscr in -lncurses... $ECHO_C" >&6
+if test "${ac_cv_lib_ncurses_initscr+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lncurses  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 2715 "configure"
+#include "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 initscr ();
+int
+main ()
+{
+initscr ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:2734: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2737: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:2740: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2743: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_ncurses_initscr=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_ncurses_initscr=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:2754: result: $ac_cv_lib_ncurses_initscr" >&5
+echo "${ECHO_T}$ac_cv_lib_ncurses_initscr" >&6
+if test $ac_cv_lib_ncurses_initscr = yes; then
+   CURSESINC='<ncurses.h>'; CURSESLIB='-lncurses';
+else
+
+	echo "$as_me:2760: checking for initscr in -lcurses" >&5
+echo $ECHO_N "checking for initscr in -lcurses... $ECHO_C" >&6
+if test "${ac_cv_lib_curses_initscr+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcurses  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 2768 "configure"
+#include "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 initscr ();
+int
+main ()
+{
+initscr ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:2787: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2790: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:2793: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2796: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_curses_initscr=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_curses_initscr=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:2807: result: $ac_cv_lib_curses_initscr" >&5
+echo "${ECHO_T}$ac_cv_lib_curses_initscr" >&6
+if test $ac_cv_lib_curses_initscr = yes; then
+   CURSESINC='<curses.h>'; CURSESLIB='-lcurses';
+fi
+
+fi
+
+		    		    		    ac_config_headers="$ac_config_headers include/aconfig.h"
+
+echo "$as_me:2817: 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 2825 "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* 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:2874: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2877: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2880: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2883: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+cat 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:2900: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:2903: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+echo "$as_me:2908: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2914 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2972: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2975: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:2978: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2981: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_c_const=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2991: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\EOF
+#define const
+EOF
+
+fi
+
+echo "$as_me:3001: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3009 "configure"
+#include "confdefs.h"
+#ifndef __cplusplus
+static $ac_kw int static_foo () {return 0; }
+$ac_kw int foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3018: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:3021: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:3024: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3027: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+
+fi
+echo "$as_me:3038: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  no)
+cat >>confdefs.h <<\EOF
+#define inline
+EOF
+ ;;
+  *)  cat >>confdefs.h <<EOF
+#define inline $ac_cv_c_inline
+EOF
+ ;;
+esac
+
+echo "$as_me:3053: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3059 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3075: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:3078: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:3081: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:3084: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_time=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_header_time=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:3094: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\EOF
+#define TIME_WITH_SYS_TIME 1
+EOF
+
+fi
+
+if test $ac_cv_c_compiler_gnu = yes; then
+    echo "$as_me:3105: checking whether $CC needs -traditional" >&5
+echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
+if test "${ac_cv_prog_gcc_traditional+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    ac_pattern="Autoconf.*'x'"
+  cat >conftest.$ac_ext <<_ACEOF
+#line 3112 "configure"
+#include "confdefs.h"
+#include <sgtty.h>
+Autoconf TIOCGETP
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "$ac_pattern" >/dev/null 2>&1; then
+  ac_cv_prog_gcc_traditional=yes
+else
+  ac_cv_prog_gcc_traditional=no
+fi
+rm -f conftest*
+
+  if test $ac_cv_prog_gcc_traditional = no; then
+    cat >conftest.$ac_ext <<_ACEOF
+#line 3127 "configure"
+#include "confdefs.h"
+#include <termio.h>
+Autoconf TCGETA
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "$ac_pattern" >/dev/null 2>&1; then
+  ac_cv_prog_gcc_traditional=yes
+fi
+rm -f conftest*
+
+  fi
+fi
+echo "$as_me:3140: result: $ac_cv_prog_gcc_traditional" >&5
+echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
+  if test $ac_cv_prog_gcc_traditional = yes; then
+    CC="$CC -traditional"
+  fi
+fi
+
+SND_UTIL_VERSION=$VERSION
+echo $VERSION > $srcdir/version
+
+cat >>confdefs.h <<EOF
+#define VERSION "$SND_UTIL_VERSION"
+EOF
+
+SND_UTIL_MAJOR=`echo $VERSION | cut -d . -f 1`
+
+SND_UTIL_MINOR=`echo $VERSION | cut -d . -f 2`
+
+SND_UTIL_SUBMINOR=`echo $VERSION | cut -d . -f 3 | sed -e 's/pre[0-9]*//g'`
+
+ac_config_files="$ac_config_files Makefile alsactl/Makefile alsamixer/Makefile amixer/Makefile aplay/Makefile include/Makefile utils/Makefile utils/alsa-utils.spec seq/Makefile seq/aconnect/Makefile seq/aseqnet/Makefile"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+        "s/'/'\\\\''/g;
+    	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+        "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+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
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:3240: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated automatically by configure.
+# 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
+SHELL=\${CONFIG_SHELL-$SHELL}
+ac_cs_invocation="\$0 \$@"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+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
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+exec 6>&1
+
+_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 <<\EOF
+
+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
+  -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 <bug-autoconf@gnu.org>."
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.52,
+  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"
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+# 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[^=]*=\(.*\)'`
+    shift
+    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+    shift
+    ;;
+  -*);;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_need_defaults=false;;
+  esac
+
+  case $1 in
+  # Handling of the options.
+EOF
+cat >>$CONFIG_STATUS <<EOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:3416: 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 )
+    shift
+    CONFIG_FILES="$CONFIG_FILES $1"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $1"
+    ac_need_defaults=false;;
+
+  # This is an error.
+  -*) { { echo "$as_me:3435: 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
+
+exec 5>>config.log
+cat >&5 << _ACEOF
+
+## ----------------------- ##
+## Running config.status.  ##
+## ----------------------- ##
+
+This file was extended by $as_me 2.52, executed with
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  > $ac_cs_invocation
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+
+_ACEOF
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE"
+ac_aux_dir="$ac_aux_dir"
+
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "alsactl/Makefile" ) CONFIG_FILES="$CONFIG_FILES alsactl/Makefile" ;;
+  "alsamixer/Makefile" ) CONFIG_FILES="$CONFIG_FILES alsamixer/Makefile" ;;
+  "amixer/Makefile" ) CONFIG_FILES="$CONFIG_FILES amixer/Makefile" ;;
+  "aplay/Makefile" ) CONFIG_FILES="$CONFIG_FILES aplay/Makefile" ;;
+  "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+  "utils/Makefile" ) CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;;
+  "utils/alsa-utils.spec" ) CONFIG_FILES="$CONFIG_FILES utils/alsa-utils.spec" ;;
+  "seq/Makefile" ) CONFIG_FILES="$CONFIG_FILES seq/Makefile" ;;
+  "seq/aconnect/Makefile" ) CONFIG_FILES="$CONFIG_FILES seq/aconnect/Makefile" ;;
+  "seq/aseqnet/Makefile" ) CONFIG_FILES="$CONFIG_FILES seq/aseqnet/Makefile" ;;
+  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+  "include/aconfig.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/aconfig.h" ;;
+  *) { { echo "$as_me:3493: 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
+
+# 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.
+: ${TMPDIR=/tmp}
+{
+  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=$TMPDIR/cs$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+   { (exit 1); exit 1; }
+}
+
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+
+#
+# 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,@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,@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,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@DEFS@,$DEFS,;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,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;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,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@DEPDIR@,$DEPDIR,;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,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@LN_S@,$LN_S,;t t
+s,@ALSA_CFLAGS@,$ALSA_CFLAGS,;t t
+s,@ALSA_LIBS@,$ALSA_LIBS,;t t
+s,@CPP@,$CPP,;t t
+s,@CURSESINC@,$CURSESINC,;t t
+s,@CURSESLIB@,$CURSESLIB,;t t
+s,@SND_UTIL_VERSION@,$SND_UTIL_VERSION,;t t
+s,@SND_UTIL_MAJOR@,$SND_UTIL_MAJOR,;t t
+s,@SND_UTIL_MINOR@,$SND_UTIL_MINOR,;t t
+s,@SND_UTIL_SUBMINOR@,$SND_UTIL_SUBMINOR,;t t
+CEOF
+
+EOF
+
+  cat >>$CONFIG_STATUS <<\EOF
+  # 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"
+
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+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=`$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 test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
+
+    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case $srcdir in
+  .)  ac_srcdir=.
+      if test -z "$ac_dots"; then
+         ac_top_srcdir=.
+      else
+         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+      fi ;;
+  [\\/]* | ?:[\\/]* )
+      ac_srcdir=$srcdir$ac_dir_suffix;
+      ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_dots$srcdir ;;
+  esac
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_dots$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:3728: 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 automatically by config.status.  */
+  configure_input="Generated automatically 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:3746: 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:3759: 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; }
+EOF
+cat >>$CONFIG_STATUS <<EOF
+  sed "$ac_vpsub
+$extrasub
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;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
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+
+#
+# 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:3820: 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:3831: 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:3844: 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
+
+EOF
+
+# 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 <<\EOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ 	]*#[ 	]*define[ 	][ 	]*\(\([^ 	(][^ 	(]*\)([^)]*)\)[ 	]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
+t end
+s,^[ 	]*#[ 	]*define[ 	][ 	]*\([^ 	][^ 	]*\)[ 	]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+EOF
+# 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 <<\EOF
+s,^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+EOF
+
+# 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 egrep "^[ 	]*#[ 	]*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 <<CEOF' >>$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 # egrep' >>$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 <<CEOF' >>$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 <<\EOF
+  # 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 automatically by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated automatically by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+      { echo "$as_me:3961: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`$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 test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+        { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
+
+      fi
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+  # Run the commands associated with the file.
+  case $ac_file in
+    include/aconfig.h ) # update the timestamp
+echo timestamp >"include/stamp-h1"
+ ;;
+  esac
+done
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+
+#
+# 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,[^:]*:,,'`
+
+  case $ac_dest in
+    default-1 )
+test x"$AMDEP_TRUE" != x"" ||
+for mf in $CONFIG_FILES; do
+  case "$mf" in
+  Makefile) dirpart=.;;
+  */Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;;
+  *) continue;;
+  esac
+  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=`echo "$file" | sed -e 's|/[^/]*$||'`
+    $ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+  esac
+done
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+
+{ (exit 0); exit 0; }
+EOF
+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=:
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS || 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
+
Index: debian/alsa-utils/configure.in
diff -u debian/alsa-utils/configure.in:1.3 debian/alsa-utils/configure.in:1.4
--- debian/alsa-utils/configure.in:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/configure.in	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,42 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(alsamixer/alsamixer.c)
+AC_PREFIX_DEFAULT(/usr)
+AM_INIT_AUTOMAKE(alsa-utils, 0.9.1)
+
+dnl Checks for programs.
+AC_PROG_CC
+dnl AC_PROG_CXX
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AM_PATH_ALSA(0.9.0)
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_LIB(ncurses, initscr, 
+             [ CURSESINC='<ncurses.h>'; CURSESLIB='-lncurses'; ], [ 
+	AC_CHECK_LIB(curses, initscr, 
+        	     [ CURSESINC='<curses.h>'; CURSESLIB='-lcurses'; ])
+])
+
+AC_SUBST(CURSESINC)
+AC_SUBST(CURSESLIB)
+
+dnl Check for Gtk+
+dnl AM_PATH_GTK(1.0.1)
+dnl CFLAGS="$CFLAGS $GTK_CFLAGS"
+
+AM_CONFIG_HEADER(include/aconfig.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_HEADER_TIME
+
+dnl Checks for library functions.
+AC_PROG_GCC_TRADITIONAL
+
+SAVE_UTIL_VERSION
+
+AC_OUTPUT(Makefile alsactl/Makefile alsamixer/Makefile amixer/Makefile aplay/Makefile \
+          include/Makefile utils/Makefile utils/alsa-utils.spec \
+	  seq/Makefile seq/aconnect/Makefile seq/aseqnet/Makefile)
Index: debian/alsa-utils/cvscompile
diff -u debian/alsa-utils/cvscompile:1.3 debian/alsa-utils/cvscompile:1.4
--- debian/alsa-utils/cvscompile:1.3	Tue Feb  3 20:38:44 2004
+++ debian/alsa-utils/cvscompile	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+aclocal $ACLOCAL_FLAGS
+autoheader
+automake --foreign --copy --add-missing
+touch depcomp		# for older automake
+autoconf
+export CFLAGS='-O2 -Wall -pipe -g'
+echo "CFLAGS=$CFLAGS"
+echo "./configure $@"
+./configure $@ || exit 1
+unset CFLAGS
+if [ -z "$CVSCOMPILE_NO_MAKE" ]; then
+  make
+fi
Index: debian/alsa-utils/debian/rules
diff -u debian/alsa-utils/debian/rules:1.3 debian/alsa-utils/debian/rules:1.4
--- debian/alsa-utils/debian/rules:1.3	Tue Jan 20 14:01:17 2004
+++ debian/alsa-utils/debian/rules	Tue Feb  3 20:52:00 2004
@@ -1,7 +1,5 @@
 #!/usr/bin/make -f
 
-include /usr/share/dpatch/dpatch.make
-
 CFLAGS = -Wall -g
 
 # These are used for cross-compiling and for saving the configure script
@@ -33,12 +31,12 @@
 
 	touch configure-stamp
 
-build: patch-stamp configure-stamp build-stamp
-build-stamp: 
+build: configure-stamp build-stamp
+build-stamp:
 	$(MAKE) CFLAGS='$(CFLAGS)'
 	touch build-stamp
 
-clean: unpatch
+clean:
 	dh_testdir
 	dh_clean
 	
@@ -61,13 +59,12 @@
 
 
 binary-indep:
-binary-arch: patch-stamp build install
+binary-arch: build install
 	dh_testdir
 	dh_testroot
 	dh_installdirs
 	dh_link
 	dh_installdocs
-	mv debian/alsa-utils/usr/share/doc/alsa-utils/patch-stamp debian/alsa-utils/usr/share/doc/alsa-utils/PATCHES
 	cp alsamixer/README debian/alsa-utils/usr/share/doc/alsa-utils/README.alsamixer
 	dh_installchangelogs ChangeLog
 	dh_installmenu
Index: debian/alsa-utils/depcomp
diff -u debian/alsa-utils/depcomp:1.3 debian/alsa-utils/depcomp:1.4
--- debian/alsa-utils/depcomp:1.3	Tue Feb  3 20:38:09 2004
+++ debian/alsa-utils/depcomp	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,411 @@
+#! /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 <oliva@dcc.unicamp.br>.
+
+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
Index: debian/alsa-utils/iecset/Makefile.am
diff -u debian/alsa-utils/iecset/Makefile.am:1.3 debian/alsa-utils/iecset/Makefile.am:1.4
--- debian/alsa-utils/iecset/Makefile.am:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/iecset/Makefile.am	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,9 @@
+INCLUDES = -I$(top_srcdir)/include
+LDADD = -lm
+# LDFLAGS = -static
+# CFLAGS += -g -Wall
+
+bin_PROGRAMS = iecset
+iecset_SOURCES = iecset.c iecbits.c
+man_MANS = iecset.1
+EXTRA_DIST = iecset.1
Index: debian/alsa-utils/iecset/Makefile.in
diff -u debian/alsa-utils/iecset/Makefile.in:1.3 debian/alsa-utils/iecset/Makefile.in:1.4
--- debian/alsa-utils/iecset/Makefile.in:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/iecset/Makefile.in	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,451 @@
+# Makefile.in generated by automake 1.7.5b from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+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@
+ALSAMIXER_FALSE = @ALSAMIXER_FALSE@
+ALSAMIXER_TRUE = @ALSAMIXER_TRUE@
+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@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+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@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+STRIP = @STRIP@
+TESTSOUND = @TESTSOUND@
+VERSION = @VERSION@
+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__leading_dot = @am__leading_dot@
+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@
+INCLUDES = -I$(top_srcdir)/include
+LDADD = -lm
+
+# LDFLAGS = -static
+# CFLAGS += -g -Wall
+bin_PROGRAMS = iecset
+iecset_SOURCES = iecset.c iecbits.c
+man_MANS = iecset.1
+EXTRA_DIST = iecset.1
+subdir = iecset
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = iecset$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_iecset_OBJECTS = iecset.$(OBJEXT) iecbits.$(OBJEXT)
+iecset_OBJECTS = $(am_iecset_OBJECTS)
+iecset_LDADD = $(LDADD)
+iecset_DEPENDENCIES =
+iecset_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/iecbits.Po ./$(DEPDIR)/iecset.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(iecset_SOURCES)
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = $(iecset_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  iecset/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+iecset$(EXEEXT): $(iecset_OBJECTS) $(iecset_DEPENDENCIES) 
+	@rm -f iecset$(EXEEXT)
+	$(LINK) $(iecset_LDFLAGS) $(iecset_OBJECTS) $(iecset_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iecbits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iecset.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 -f "$(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 -f "$(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`
+uninstall-info-am:
+
+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
+
+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)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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; }'`; \
+	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
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@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
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+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:
+
+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."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic ctags distclean distclean-compile \
+	distclean-depend distclean-generic distclean-tags distdir dvi \
+	dvi-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-exec install-exec-am \
+	install-info install-info-am install-man install-man1 \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-info-am uninstall-man uninstall-man1
+
+# 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:
Index: debian/alsa-utils/iecset/iecbits.c
diff -u debian/alsa-utils/iecset/iecbits.c:1.3 debian/alsa-utils/iecset/iecbits.c:1.4
--- debian/alsa-utils/iecset/iecbits.c:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/iecset/iecbits.c	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,213 @@
+/*
+   iecdump - dump IEC958 status bits on ALSA
+   Copyright (C) 2003 by Takashi Iwai <tiwai@suse.de>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2
+   of the License, or (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include <stdio.h>
+#include <alsa/asoundlib.h>
+
+struct category_str {
+	int val;
+	const char *name;
+};
+
+static struct category_str con_category[] = {
+	{ IEC958_AES1_CON_DAT, "DAT" },
+	{ IEC958_AES1_CON_VCR, "VCR" },
+	{ IEC958_AES1_CON_MICROPHONE, "microphone" },
+	{ IEC958_AES1_CON_SYNTHESIZER, "synthesizer" },
+	{ IEC958_AES1_CON_RATE_CONVERTER, "rate converter" },
+	{ IEC958_AES1_CON_MIXER, "mixer" },
+	{ IEC958_AES1_CON_SAMPLER, "sampler" },
+	{ IEC958_AES1_CON_PCM_CODER, "PCM coder" },
+	{ IEC958_AES1_CON_IEC908_CD, "CD" },
+	{ IEC958_AES1_CON_NON_IEC908_CD, "non-IEC908 CD" },
+	{ IEC958_AES1_CON_GENERAL, "general" },
+};
+
+
+#define ARRAY_SIZE(x) (int)(sizeof(x)/sizeof(x[0]))
+
+void dump_iec958(snd_aes_iec958_t *iec)
+{
+	int i;
+
+	if (! (iec->status[0] & IEC958_AES0_PROFESSIONAL)) {
+		/* consumer */
+		printf("Mode: consumer\n");
+		printf("Data: ");
+		if (!(iec->status[0] & IEC958_AES0_NONAUDIO)) {
+			printf("audio\n");
+		} else {
+			printf("non-audio\n");
+		}
+		printf("Rate: ");
+		switch (iec->status[3] & IEC958_AES3_CON_FS) {
+		case IEC958_AES3_CON_FS_44100:
+			printf("44100 Hz\n");
+			break;
+		case IEC958_AES3_CON_FS_48000:
+			printf("48000 Hz\n");
+			break;
+		case IEC958_AES3_CON_FS_32000:
+			printf("32000 Hz\n");
+			break;
+		default:
+			printf("unknown\n");
+			break;
+		}
+		printf("Copyright: ");
+		if (iec->status[0] & IEC958_AES0_CON_NOT_COPYRIGHT) {
+			printf("permitted\n");
+		} else {
+			printf("protected\n");
+		}
+		printf("Emphasis: ");
+		if ((iec->status[0] & IEC958_AES0_CON_EMPHASIS) != IEC958_AES0_CON_EMPHASIS_5015) {
+			printf("none\n");
+		} else {
+			printf("50/15us\n");
+		}
+		printf("Category: ");
+		for (i = 0; i < ARRAY_SIZE(con_category); i++) {
+			if ((iec->status[1] & IEC958_AES1_CON_CATEGORY) == con_category[i].val) {
+				printf("%s\n", con_category[i].name);
+				break;
+			}
+		}
+		if (i >= ARRAY_SIZE(con_category)) {
+			printf("unknown 0x%x\n", iec->status[1] & IEC958_AES1_CON_CATEGORY);
+		}
+		printf("Original: ");
+		if (iec->status[1] & IEC958_AES1_CON_ORIGINAL) {
+			printf("original\n");
+		} else {
+			printf("1st generation\n");
+		}
+		printf("Clock: ");
+		switch (iec->status[3] & IEC958_AES3_CON_CLOCK) {
+		case IEC958_AES3_CON_CLOCK_1000PPM:
+			printf("1000 ppm\n");
+			break;
+		case IEC958_AES3_CON_CLOCK_50PPM:
+			printf("50 ppm\n");
+			break;
+		case IEC958_AES3_CON_CLOCK_VARIABLE:
+			printf("variable pitch\n");
+			break;
+		default:
+			printf("unknown\n");
+			break;
+		}
+	} else {
+		printf("Mode: professional\n");
+		printf("Data: ");
+		if (!(iec->status[0] & IEC958_AES0_NONAUDIO)) {
+			printf("audio\n");
+		} else {
+			printf("non-audio\n");
+		}
+		printf("Rate: ");
+		switch (iec->status[0] & IEC958_AES0_PRO_FS) {
+		case IEC958_AES0_PRO_FS_44100:
+			printf("44100 Hz\n");
+			break;
+		case IEC958_AES0_PRO_FS_48000:
+			printf("48000 Hz\n");
+			break;
+		case IEC958_AES0_PRO_FS_32000:
+			printf("32000 Hz\n");
+			break;
+		default:
+			printf("unknown\n");
+			break;
+		}
+		printf("Rate Locked: ");
+		if (iec->status[0] & IEC958_AES0_PRO_FREQ_UNLOCKED)
+			printf("no\n");
+		else
+			printf("yes\n");
+		printf("Emphasis: ");
+		switch (iec->status[0] & IEC958_AES0_PRO_EMPHASIS) {
+		case IEC958_AES0_PRO_EMPHASIS_CCITT:
+			printf("CCITT J.17\n");
+			break;
+		case IEC958_AES0_PRO_EMPHASIS_NONE:
+			printf("none\n");
+			break;
+		case IEC958_AES0_PRO_EMPHASIS_5015:
+			printf("50/15us\n");
+			break;
+		case IEC958_AES0_PRO_EMPHASIS_NOTID:
+		default:
+			printf("unknown\n");
+			break;
+		}
+		printf("Stereophonic: ");
+		if ((iec->status[1] & IEC958_AES1_PRO_MODE) == IEC958_AES1_PRO_MODE_STEREOPHONIC) {
+			printf("stereo\n");
+		} else {
+			printf("not indicated\n");
+		}
+		printf("Userbits: ");
+		switch (iec->status[1] & IEC958_AES1_PRO_USERBITS) {
+		case IEC958_AES1_PRO_USERBITS_192:
+			printf("192bit\n");
+			break;
+		case IEC958_AES1_PRO_USERBITS_UDEF:
+			printf("user-defined\n");
+			break;
+		default:
+			printf("unkown\n");
+			break;
+		}
+		printf("Sample Bits: ");
+		switch (iec->status[2] & IEC958_AES2_PRO_SBITS) {
+		case IEC958_AES2_PRO_SBITS_20:
+			printf("20 bit\n");
+			break;
+		case IEC958_AES2_PRO_SBITS_24:
+			printf("24 bit\n");
+			break;
+		case IEC958_AES2_PRO_SBITS_UDEF:
+			printf("user defined\n");
+			break;
+		default:
+			printf("unknown\n");
+			break;
+		}
+		printf("Word Length: ");
+		switch (iec->status[2] & IEC958_AES2_PRO_WORDLEN) {
+		case IEC958_AES2_PRO_WORDLEN_22_18:
+			printf("22 bit or 18 bit\n");
+			break;
+		case IEC958_AES2_PRO_WORDLEN_23_19:
+			printf("23 bit or 19 bit\n");
+			break;
+		case IEC958_AES2_PRO_WORDLEN_24_20:
+			printf("24 bit or 20 bit\n");
+			break;
+		case IEC958_AES2_PRO_WORDLEN_20_16:
+			printf("20 bit or 16 bit\n");
+			break;
+		default:
+			printf("unknown\n");
+			break;
+		}
+	}
+}
+
Index: debian/alsa-utils/iecset/iecset.1
diff -u debian/alsa-utils/iecset/iecset.1:1.3 debian/alsa-utils/iecset/iecset.1:1.4
--- debian/alsa-utils/iecset/iecset.1:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/iecset/iecset.1	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,100 @@
+.TH iecset 1 "23 Oct 2003"
+.SH NAME
+iecset \- Set or dump IEC958 status bits
+
+.SH SYNOPSIS
+\fBiecset\fP [\fIoptions\fP] [\fIcmd\fP \fIarg\fP...]
+
+.SH DESCRIPTION
+\fBiecset\fP is a small utility to set or dump the IEC958 (or so-called
+"S/PDIF") status bits of the specified sound card via ALSA control API.
+
+When \fBiecset\fP is started without arguments except for options,
+it will show the current IEC958 status in a human-readable form.
+When the commands are given in the arguments, they are parsed
+and the IEC958 status bits are updated.  The resultant status is
+shown as well.
+
+The commands consist of the command directive and the argument.
+As the boolean argument, \fIyes\fP, \fIno\fP, \fItrue\fP, \fIfalse\fI,
+or a digit number is allowed.
+
+.SH EXAMPLES
+.TP
+.BI iecset\ \-Dhw:1
+Displays the current IEC958 status bits on the second card.
+This is equivalent with \fI-c 1\fP.
+.TP
+.BI iecset\ \-x
+Displays the current IEC958 status bits in a style of the arguments
+for the PCM stream.  The output string can be passed to the \fIiec958\fP
+(or \fIspdif\fP) PCM type as the optional argument.
+.TP
+.BI iecset\ pro\ off\ audio\ off
+Sets the current status to the consumer-mode and turns on the
+non-audio bit.  The modified status will be shown, too.
+
+.SH OPTIONS
+.TP
+\fI-D\fP device
+Specifies the device name of the control to open
+.TP
+\fI-c\fP card
+Specifies the card index to open.  Equivalent with \fI-Dhw:x\fP.
+.TP
+\fI-x\fP
+Dumps the status in the form of AESx bytes.
+.TP
+\fI-i\fP
+Reads the command sequences from stdin.
+Each line has single command.
+
+.SH COMMANDS
+.TP
+\fIprofessional\fP <bool>
+The professional mode (true) or consumer mode (false).
+
+.TP
+\fIaudio\fP <bool>
+The audio mode (true) or non-audio mode (false).
+
+.TP
+\fIrate\fP <int>
+The sample rate in Hz.
+
+.TP
+\fIemphasis\fP <int>
+The emphasis: 0 = none, 1 = 50/15us, 2 = CCITT.
+
+.TP
+\fIlock\fP <bool>
+Rate lock: locked (true), unlocked (false).
+This command is for the professional mode only.
+
+.TP
+\fIsbits\fP <int>
+Sample bits:  2 = 20bit, 4 = 24bit, 6 = undefined.
+This command is for the professional mode only.
+
+.TP
+\fIwordlength\fP <int>
+Wordlength: 0 = No, 2 = 22-18 bit, 4 = 23-19 bit, 5 = 24-20 bit, 6 = 20-16 bit.
+This command is for the professional mode only.
+
+.TP
+\fIcategory\fP <int>
+Category: the value is from 0 to 0x7f.
+This command is for the consumer mode only.
+
+.TP
+\fIcopyright\fP <bool>
+Copyright: copyrighted (true), non-copyrighted (false).
+This command is for the consumer mode only.
+
+.TP
+\fIoriginal\fP <boo>
+Original flag: original (true), 1st generation (false).
+This command is for the consumer mode only.
+
+.SH AUTHOR
+Takashi Iwai <tiwai@suse.de>
Index: debian/alsa-utils/iecset/iecset.c
diff -u debian/alsa-utils/iecset/iecset.c:1.3 debian/alsa-utils/iecset/iecset.c:1.4
--- debian/alsa-utils/iecset/iecset.c:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/iecset/iecset.c	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,400 @@
+/*
+   iecset - change IEC958 status bits on ALSA
+   Copyright (C) 2003 by Takashi Iwai <tiwai@suse.de>
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2
+   of the License, or (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <alsa/asoundlib.h>
+
+void dump_iec958(snd_aes_iec958_t *iec);
+
+static int get_bool(const char *str)
+{
+	if (strncmp(str, "yes", 3) == 0 ||
+	    strncmp(str, "YES", 3) == 0 ||
+	    strncmp(str, "on", 2) == 0 ||
+	    strncmp(str, "ON", 2) == 0 ||
+	    strncmp(str, "true", 4) == 0 ||
+	    strncmp(str, "TRUE", 4) == 0 ||
+	    *str == '1')
+		return 1;
+	return 0;
+}
+
+enum {
+	CMD_BOOL, CMD_BOOL_INV, CMD_INT
+};
+
+enum {
+	IDX_PRO, IDX_NOAUDIO, IDX_RATE, IDX_UNLOCK, IDX_SBITS, IDX_WORD, IDX_EMP, IDX_CAT, IDX_NOCOPY, IDX_ORIG,
+	IDX_LAST
+};
+
+struct cmdtbl {
+	const char *name;
+	int idx;
+	int type;
+	const char *desc;
+};
+
+static struct cmdtbl cmds[] = {
+	{ "pro", IDX_PRO, CMD_BOOL,
+	  "professional (common)\n\toff = consumer mode, on = professional mode" },
+	{ "aud", IDX_NOAUDIO, CMD_BOOL_INV,
+	  "audio (common)\n\toff = audio mode, on = non-audio mode" },
+	{ "rat", IDX_RATE, CMD_INT,
+	  "sample rate (common)\n\tsample rate in Hz" },
+	{ "emp", IDX_EMP, CMD_INT,
+	  "emphasis (common)\n\t0 = none, 1 = 50/15us, 2 = CCITT" },
+	{ "loc", IDX_UNLOCK, CMD_BOOL_INV,
+	  "lock (prof.)\n\toff = rate unlocked, on = rate locked" },
+	{ "sbi", IDX_SBITS, CMD_INT,
+	  "sbits (prof.)\n\tsample bits 2 = 20bit, 4 = 24bit, 6 = undef" },
+	{ "wor", IDX_WORD, CMD_INT,
+	  "wordlength (prof.)\n\t0=no, 2=22-18bit, 4=23-19bit, 5=24-20bit, 6=20-16bit" },
+	{ "cat", IDX_CAT, CMD_INT,
+	  "category (consumer)\n\t0-0x7f" },
+	{ "cop", IDX_NOCOPY, CMD_BOOL_INV,
+	  "copyright (consumer)\n\toff = non-copyright, on = copyright" },
+	{ "ori", IDX_ORIG, CMD_BOOL,
+	  "original (consumer)\n\toff = 1st-gen, on = original" },
+};
+
+
+static void error(const char *s, int err)
+{
+	fprintf(stderr, "%s: %s\n", s, snd_strerror(err));
+}
+
+
+static void usage(void)
+{
+	int i;
+
+	printf("Usage: iecset [options] [cmd arg...]\n");
+	printf("Options:\n");
+	printf("    -D device   specifies the control device to use\n");
+	printf("    -c card     specifies the card number to use (equiv. with -Dhw:#)\n");
+	printf("    -x          dump the dump the AESx hex code for IEC958 PCM parameters\n");
+	printf("    -i          read commands from stdin\n");
+	printf("Commands:\n");
+	for (i = 0; i < (int)(sizeof(cmds)/sizeof(cmds[0])); i++) {
+		printf("    %s\n", cmds[i].desc);
+	}
+}
+
+
+/*
+ * parse iecset commands
+ */
+static void parse_command(int *parms, const char *c, const char *arg)
+{
+	int i;
+
+	for (i = 0; i < (int)(sizeof(cmds)/sizeof(cmds[0])); i++) {
+		if (strncmp(c, cmds[i].name, strlen(cmds[i].name)) == 0) {
+			int val;
+			switch (cmds[i].type) {
+			case CMD_BOOL:
+				val = get_bool(arg);
+				break;
+			case CMD_BOOL_INV:
+				val = !get_bool(arg);
+				break;
+			case CMD_INT:
+			default:
+				val = (int)strtol(arg, NULL, 0);
+				break;
+			}
+			parms[cmds[i].idx] = val;
+			return;
+		}
+	}
+}
+
+static char *skipspace(char *line)
+{
+	char *p;
+	for (p = line; *p && isspace(*p); p++)
+		;
+	return p;
+}
+
+/*
+ * parse iecset commands from the file
+ */
+static void parse_file(int *parms, FILE *fp)
+{
+	char line[1024], *cmd, *arg;
+	while (fgets(line, sizeof(line), fp) != NULL) {
+		cmd = skipspace(line);
+		if (*cmd == '#' || ! *cmd)
+			continue;
+		for (arg = cmd; *arg && !isspace(*arg); arg++)
+			;
+		if (! *arg)
+			continue;
+		*arg++ = 0;
+		arg = skipspace(arg);
+		if (! *arg)
+			continue;
+		parse_command(parms, cmd, arg);
+	}
+}
+
+/* update iec958 status values
+ * return non-zero if the values are modified
+ */
+static int update_iec958_status(snd_aes_iec958_t *iec958, int *parms)
+{
+	int changed = 0;
+	if (parms[IDX_PRO] >= 0) {
+		if (parms[IDX_PRO])
+			iec958->status[0] |= IEC958_AES0_PROFESSIONAL;
+		else
+			iec958->status[0] &= ~IEC958_AES0_PROFESSIONAL;
+		changed = 1;
+	}
+	if (parms[IDX_NOAUDIO] >= 0) {
+		if (parms[IDX_NOAUDIO])
+			iec958->status[0] |= IEC958_AES0_NONAUDIO;
+		else
+			iec958->status[0] &= ~IEC958_AES0_NONAUDIO;
+		changed = 1;
+	}
+	if (parms[IDX_RATE] >= 0) {
+		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
+			iec958->status[0] &= ~IEC958_AES0_PRO_FS;
+			switch (parms[IDX_RATE]) {
+			case 44100:
+				iec958->status[0] |= IEC958_AES0_PRO_FS_44100;
+				break;
+			case 48000:
+				iec958->status[0] |= IEC958_AES0_PRO_FS_48000;
+				break;
+			case 3200:
+				iec958->status[0] |= IEC958_AES0_PRO_FS_32000;
+				break;
+			}
+		} else {
+			iec958->status[3] &= ~IEC958_AES3_CON_FS;
+			switch (parms[IDX_RATE]) {
+			case 44100:
+				iec958->status[3] |= IEC958_AES3_CON_FS_44100;
+				break;
+			case 48000:
+				iec958->status[3] |= IEC958_AES3_CON_FS_48000;
+				break;
+			case 3200:
+				iec958->status[3] |= IEC958_AES3_CON_FS_32000;
+				break;
+			}
+		}
+		changed = 1;
+	}
+	if (parms[IDX_NOCOPY] >= 0) {
+		if (! (iec958->status[0] & IEC958_AES0_PROFESSIONAL)) {
+			if (parms[IDX_NOCOPY])
+				iec958->status[0] |= IEC958_AES0_CON_NOT_COPYRIGHT;
+			else
+				iec958->status[0] &= ~IEC958_AES0_CON_NOT_COPYRIGHT;
+		}
+		changed = 1;
+	}
+	if (parms[IDX_ORIG] >= 0) {
+		if (! (iec958->status[0] & IEC958_AES0_PROFESSIONAL)) {
+			if (parms[IDX_ORIG])
+				iec958->status[1] |= IEC958_AES1_CON_ORIGINAL;
+			else
+				iec958->status[1] &= ~IEC958_AES1_CON_ORIGINAL;
+		}
+		changed = 1;
+	}
+	if (parms[IDX_EMP] >= 0) {
+		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
+			iec958->status[0] &= ~IEC958_AES0_PRO_EMPHASIS;
+			switch (parms[IDX_EMP]) {
+			case 0:
+				iec958->status[0] |= IEC958_AES0_PRO_EMPHASIS_NONE;
+				break;
+			case 1:
+				iec958->status[0] |= IEC958_AES0_PRO_EMPHASIS_5015;
+				break;
+			case 2:
+				iec958->status[0] |= IEC958_AES0_PRO_EMPHASIS_CCITT;
+				break;
+			}
+		} else {
+			if (parms[IDX_EMP])
+				iec958->status[0] |= IEC958_AES0_CON_EMPHASIS_5015;
+			else
+				iec958->status[0] &= ~IEC958_AES0_CON_EMPHASIS_5015;
+		}
+		changed = 1;
+	}
+	if (parms[IDX_UNLOCK] >= 0) {
+		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
+			if (parms[IDX_UNLOCK])
+				iec958->status[0] |= IEC958_AES0_PRO_FREQ_UNLOCKED;
+			else
+				iec958->status[0] &= ~IEC958_AES0_PRO_FREQ_UNLOCKED;
+		}
+		changed = 1;
+	}
+	if (parms[IDX_SBITS] >= 0) {
+		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
+			iec958->status[2] &= ~IEC958_AES2_PRO_SBITS;
+			iec958->status[2] |= parms[IDX_SBITS] & 7;
+		}
+		changed = 1;
+	}
+	if (parms[IDX_WORD] >= 0) {
+		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
+			iec958->status[2] &= ~IEC958_AES2_PRO_WORDLEN;
+			iec958->status[2] |= (parms[IDX_WORD] & 7) << 3;
+		}
+		changed = 1;
+	}
+	if (parms[IDX_CAT] >= 0) {
+		if (! (iec958->status[0] & IEC958_AES0_PROFESSIONAL)) {
+			iec958->status[1] &= ~IEC958_AES1_CON_CATEGORY;
+			iec958->status[1] |= parms[IDX_CAT] & 0x7f;
+		}
+		changed = 1;
+	}
+
+	return changed;
+}
+		
+
+int main(int argc, char **argv)
+{
+	const char *dev = "default";
+	const char *spdif_str = SND_CTL_NAME_IEC958("", PLAYBACK, DEFAULT);
+	snd_ctl_t *ctl;
+	snd_ctl_elem_list_t *clist;
+	snd_ctl_elem_id_t *cid;
+	snd_ctl_elem_value_t *cval;
+	snd_aes_iec958_t iec958;
+	int from_stdin = 0;
+	int dumphex = 0;
+	int i, c, err;
+	unsigned int controls, cidx;
+	char tmpname[32];
+	int parms[IDX_LAST];
+
+	for (i = 0; i < IDX_LAST; i++)
+		parms[i] = -1; /* not set */
+
+	while ((c = getopt(argc, argv, "D:c:xhi")) != -1) {
+		switch (c) {
+		case 'D':
+			dev = optarg;
+			break;
+		case 'c':
+			i = atoi(optarg);
+			if (i < 0 || i >= 7) {
+				fprintf(stderr, "invalid card index %d\n", i);
+				return 1;
+			}
+			sprintf(tmpname, "hw:%d", i);
+			dev = tmpname;
+			break;
+		case 'x':
+			dumphex = 1;
+			break;
+		case 'i':
+			from_stdin = 1;
+			break;
+		default:
+			usage();
+			return 1;
+		}
+	}
+
+	if ((err = snd_ctl_open(&ctl, dev, 0)) < 0) {
+		error("snd_ctl_open", err);
+		return 1;
+	}
+
+	snd_ctl_elem_list_alloca(&clist);
+	if ((err = snd_ctl_elem_list(ctl, clist)) < 0) {
+		error("snd_ctl_elem_list", err);
+		return 1;
+	}
+	if ((err = snd_ctl_elem_list_alloc_space(clist, snd_ctl_elem_list_get_count(clist))) < 0) {
+		error("snd_ctl_elem_list_alloc_space", err);
+		return 1;
+	}
+	if ((err = snd_ctl_elem_list(ctl, clist)) < 0) {
+		error("snd_ctl_elem_list", err);
+		return 1;
+	}
+
+	controls = snd_ctl_elem_list_get_used(clist);
+	for (cidx = 0; cidx < controls; cidx++) {
+		if (!strcmp(snd_ctl_elem_list_get_name(clist, cidx), spdif_str))
+			break;
+	}
+	if (cidx >= controls) {
+		fprintf(stderr, "control \"%s\" not found\n", spdif_str);
+		return 1;
+	}
+
+	snd_ctl_elem_id_alloca(&cid);
+	snd_ctl_elem_list_get_id(clist, cidx, cid);
+	snd_ctl_elem_value_alloca(&cval);
+	snd_ctl_elem_value_set_id(cval, cid);
+	if ((err = snd_ctl_elem_read(ctl, cval)) < 0) {
+		error("snd_ctl_elem_read", err);
+		return 1;
+	}
+
+	snd_ctl_elem_value_get_iec958(cval, &iec958);
+
+	/* parse from stdin */
+	if (from_stdin)
+		parse_file(parms, stdin);
+
+	/* parse commands */
+	for (c = optind; c < argc - 1; c += 2)
+		parse_command(parms, argv[c], argv[c + 1]);
+
+	if (update_iec958_status(&iec958, parms)) {
+		/* store the values */
+		snd_ctl_elem_value_set_iec958(cval, &iec958);
+		if ((err = snd_ctl_elem_write(ctl, cval)) < 0) {
+			error("snd_ctl_elem_write", err);
+			return 1;
+		}
+		if ((err = snd_ctl_elem_read(ctl, cval)) < 0) {
+			error("snd_ctl_elem_write", err);
+			return 1;
+		}
+		snd_ctl_elem_value_get_iec958(cval, &iec958);
+	}
+
+	if (dumphex)
+		printf("AES0=0x%02x,AES1=0x%02x,AES2=0x%02x,AES3=0x%02x\n",
+		       iec958.status[0], iec958.status[1], iec958.status[2], iec958.status[3]);
+	else
+		dump_iec958(&iec958);
+
+	snd_ctl_close(ctl);
+	return 0;
+}
Index: debian/alsa-utils/include/Makefile.am
diff -u debian/alsa-utils/include/Makefile.am:1.3 debian/alsa-utils/include/Makefile.am:1.4
--- debian/alsa-utils/include/Makefile.am:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/include/Makefile.am	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,25 @@
+noinst_HEADERS=version.h
+
+version.h: stamp-vh
+	@:
+
+stamp-vh: $(top_builddir)/configure.in
+	@echo "/*" > ver.tmp
+	@echo " *  version.h" >> ver.tmp
+	@echo " */" >> ver.tmp
+	@echo "" >> ver.tmp
+	@echo "#define SND_UTIL_MAJOR		$(SND_UTIL_MAJOR)" >> ver.tmp
+	@echo "#define SND_UTIL_MINOR		$(SND_UTIL_MINOR)" >> ver.tmp
+	@echo "#define SND_UTIL_SUBMINOR	$(SND_UTIL_SUBMINOR)" >> ver.tmp
+	@echo "#define SND_UTIL_VERSION		((SND_UTIL_MAJOR<<16)|\\" >> ver.tmp
+	@echo "				 (SND_UTIL_MINOR<<8)|\\" >> ver.tmp
+	@echo "				  SND_UTIL_SUBMINOR)" >> ver.tmp
+	@echo "#define SND_UTIL_VERSION_STR	\"$(SND_UTIL_VERSION)\"" >> ver.tmp
+	@echo >> ver.tmp
+	@cmp -s version.h ver.tmp \
+          || (echo "Updating version.h"; \
+              cp ver.tmp version.h; \
+              echo timestamp > stamp-vh)
+	-@rm -f ver.tmp
+
+INCLUDES=-I$(top_srcdir)/include
Index: debian/alsa-utils/include/Makefile.in
diff -u debian/alsa-utils/include/Makefile.in:1.3 debian/alsa-utils/include/Makefile.in:1.4
--- debian/alsa-utils/include/Makefile.in:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/include/Makefile.in	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,281 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+noinst_HEADERS = version.h
+
+INCLUDES = -I$(top_srcdir)/include
+subdir = include
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = aconfig.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+HEADERS = $(noinst_HEADERS)
+
+DIST_COMMON = $(noinst_HEADERS) ./stamp-h.in Makefile.am Makefile.in \
+	aconfig.h.in
+all: aconfig.h
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  include/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+aconfig.h: stamp-h
+	@if test ! -f $@; then \
+		rm -f stamp-h; \
+		$(MAKE) stamp-h; \
+	else :; fi
+stamp-h: $(srcdir)/aconfig.h.in $(top_builddir)/config.status
+	@rm -f stamp-h stamp-hT
+	@echo timestamp > stamp-hT 2> /dev/null
+	cd $(top_builddir) \
+	  && CONFIG_FILES= CONFIG_HEADERS=include/aconfig.h \
+	     $(SHELL) ./config.status
+	@mv stamp-hT stamp-h
+$(srcdir)/aconfig.h.in:  $(srcdir)/./stamp-h.in
+	@if test ! -f $@; then \
+		rm -f $(srcdir)/./stamp-h.in; \
+		$(MAKE) $(srcdir)/./stamp-h.in; \
+	else :; fi
+$(srcdir)/./stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+	@rm -f $(srcdir)/./stamp-h.in $(srcdir)/./stamp-h.inT
+	@echo timestamp > $(srcdir)/./stamp-h.inT 2> /dev/null
+	cd $(top_srcdir) && $(AUTOHEADER)
+	@mv $(srcdir)/./stamp-h.inT $(srcdir)/./stamp-h.in
+
+distclean-hdr:
+	-rm -f aconfig.h
+uninstall-info-am:
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES) aconfig.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) $(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)aconfig.h.in$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags aconfig.h.in $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS) aconfig.h
+
+installdirs:
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am clean clean-generic distclean \
+	distclean-generic distclean-hdr distclean-tags distdir dvi \
+	dvi-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic tags \
+	uninstall uninstall-am uninstall-info-am
+
+
+version.h: stamp-vh
+	@:
+
+stamp-vh: $(top_builddir)/configure.in
+	@echo "/*" > ver.tmp
+	@echo " *  version.h" >> ver.tmp
+	@echo " */" >> ver.tmp
+	@echo "" >> ver.tmp
+	@echo "#define SND_UTIL_MAJOR		$(SND_UTIL_MAJOR)" >> ver.tmp
+	@echo "#define SND_UTIL_MINOR		$(SND_UTIL_MINOR)" >> ver.tmp
+	@echo "#define SND_UTIL_SUBMINOR	$(SND_UTIL_SUBMINOR)" >> ver.tmp
+	@echo "#define SND_UTIL_VERSION		((SND_UTIL_MAJOR<<16)|\\" >> ver.tmp
+	@echo "				 (SND_UTIL_MINOR<<8)|\\" >> ver.tmp
+	@echo "				  SND_UTIL_SUBMINOR)" >> ver.tmp
+	@echo "#define SND_UTIL_VERSION_STR	\"$(SND_UTIL_VERSION)\"" >> ver.tmp
+	@echo >> ver.tmp
+	@cmp -s version.h ver.tmp \
+          || (echo "Updating version.h"; \
+              cp ver.tmp version.h; \
+              echo timestamp > stamp-vh)
+	-@rm -f ver.tmp
+# 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:
Index: debian/alsa-utils/include/aconfig.h.in
diff -u debian/alsa-utils/include/aconfig.h.in:1.3 debian/alsa-utils/include/aconfig.h.in:1.4
--- debian/alsa-utils/include/aconfig.h.in:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/include/aconfig.h.in	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,23 @@
+/* include/aconfig.h.in.  Generated automatically from configure.in by autoheader.  */
+
+/* Define if you have the `asound' library (-lasound). */
+#undef HAVE_LIBASOUND
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* ALSA util version */
+#undef VERSION
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define as `__inline' if that's what the C compiler calls it, or to nothing
+   if it is not supported. */
+#undef inline
Index: debian/alsa-utils/include/version.h
diff -u debian/alsa-utils/include/version.h:1.3 debian/alsa-utils/include/version.h:1.4
--- debian/alsa-utils/include/version.h:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/include/version.h	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,12 @@
+/*
+ *  version.h
+ */
+
+#define SND_UTIL_MAJOR		0
+#define SND_UTIL_MINOR		9
+#define SND_UTIL_SUBMINOR	1
+#define SND_UTIL_VERSION		((SND_UTIL_MAJOR<<16)|\
+				 (SND_UTIL_MINOR<<8)|\
+				  SND_UTIL_SUBMINOR)
+#define SND_UTIL_VERSION_STR	"0.9.1"
+
Index: debian/alsa-utils/install-sh
diff -u debian/alsa-utils/install-sh:1.3 debian/alsa-utils/install-sh:1.4
--- debian/alsa-utils/install-sh:1.3	Tue Feb  3 20:38:18 2004
+++ debian/alsa-utils/install-sh	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# 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}"
+
+transformbasename=""
+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=:
+		chmodcmd=""
+	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
Index: debian/alsa-utils/missing
diff -u debian/alsa-utils/missing:1.3 debian/alsa-utils/missing:1.4
--- debian/alsa-utils/missing:1.3	Tue Feb  3 20:38:27 2004
+++ debian/alsa-utils/missing	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,283 @@
+#! /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 <pinard@iro.umontreal.ca>, 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
Index: debian/alsa-utils/mkinstalldirs
diff -u debian/alsa-utils/mkinstalldirs:1.3 debian/alsa-utils/mkinstalldirs:1.4
--- debian/alsa-utils/mkinstalldirs:1.3	Tue Feb  3 20:38:36 2004
+++ debian/alsa-utils/mkinstalldirs	Tue Feb  3 20:51:58 2004
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje 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
Index: debian/alsa-utils/seq/Makefile.am
diff -u debian/alsa-utils/seq/Makefile.am:1.3 debian/alsa-utils/seq/Makefile.am:1.4
--- debian/alsa-utils/seq/Makefile.am:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/seq/Makefile.am	Tue Feb  3 20:52:00 2004
@@ -0,0 +1 @@
+SUBDIRS=aconnect aseqnet
Index: debian/alsa-utils/seq/Makefile.in
diff -u debian/alsa-utils/seq/Makefile.in:1.3 debian/alsa-utils/seq/Makefile.in:1.4
--- debian/alsa-utils/seq/Makefile.in:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/seq/Makefile.in	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,315 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+SUBDIRS = aconnect aseqnet
+subdir = seq
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
+	uninstall-info-recursive all-recursive install-data-recursive \
+	install-exec-recursive installdirs-recursive install-recursive \
+	uninstall-recursive check-recursive installcheck-recursive
+DIST_COMMON = Makefile.am Makefile.in
+DIST_SUBDIRS = $(SUBDIRS)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  seq/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@set fnord $(MAKEFLAGS); amf=$$2; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $(MAKEFLAGS); amf=$$2; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	for subdir in $(SUBDIRS); do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d $(distdir)/$$subdir \
+	    || mkdir $(distdir)/$$subdir \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$(top_distdir)" \
+	        distdir=../$(distdir)/$$subdir \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
+	clean-generic clean-recursive distclean distclean-generic \
+	distclean-recursive distclean-tags distdir dvi dvi-am \
+	dvi-recursive info info-am info-recursive install install-am \
+	install-data install-data-am install-data-recursive \
+	install-exec install-exec-am install-exec-recursive \
+	install-info install-info-am install-info-recursive install-man \
+	install-recursive install-strip installcheck installcheck-am \
+	installdirs installdirs-am installdirs-recursive \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-recursive tags tags-recursive uninstall \
+	uninstall-am uninstall-info-am uninstall-info-recursive \
+	uninstall-recursive
+
+# 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:
Index: debian/alsa-utils/seq/aconnect/Makefile.am
diff -u debian/alsa-utils/seq/aconnect/Makefile.am:1.3 debian/alsa-utils/seq/aconnect/Makefile.am:1.4
--- debian/alsa-utils/seq/aconnect/Makefile.am:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aconnect/Makefile.am	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,6 @@
+INCLUDES = -I$(top_srcdir)/include
+EXTRA_DIST = README.aconnect aconnect.1
+
+bin_PROGRAMS = aconnect
+aconnect_SOURCES = aconnect.c
+man_MANS = aconnect.1
Index: debian/alsa-utils/seq/aconnect/Makefile.in
diff -u debian/alsa-utils/seq/aconnect/Makefile.in:1.3 debian/alsa-utils/seq/aconnect/Makefile.in:1.4
--- debian/alsa-utils/seq/aconnect/Makefile.in:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aconnect/Makefile.in	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,356 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+INCLUDES = -I$(top_srcdir)/include
+EXTRA_DIST = README.aconnect aconnect.1
+
+bin_PROGRAMS = aconnect
+aconnect_SOURCES = aconnect.c
+man_MANS = aconnect.1
+subdir = seq/aconnect
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = aconnect$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_aconnect_OBJECTS = aconnect.$(OBJEXT)
+aconnect_OBJECTS = $(am_aconnect_OBJECTS)
+aconnect_LDADD = $(LDADD)
+aconnect_DEPENDENCIES =
+aconnect_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/aconnect.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(aconnect_SOURCES)
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = $(aconnect_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  seq/aconnect/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+aconnect$(EXEEXT): $(aconnect_OBJECTS) $(aconnect_DEPENDENCIES) 
+	@rm -f aconnect$(EXEEXT)
+	$(LINK) $(aconnect_LDFLAGS) $(aconnect_OBJECTS) $(aconnect_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/aconnect.Po@am__quote@
+
+distclean-depend:
+	-rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+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/^.*\\.//'`; \
+	  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/^.*\\.//'`; \
+	  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
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic distclean distclean-compile distclean-depend \
+	distclean-generic distclean-tags distdir dvi dvi-am info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-man1 install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+	uninstall-man1
+
+# 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:
Index: debian/alsa-utils/seq/aconnect/README.aconnect
diff -u debian/alsa-utils/seq/aconnect/README.aconnect:1.3 debian/alsa-utils/seq/aconnect/README.aconnect:1.4
--- debian/alsa-utils/seq/aconnect/README.aconnect:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aconnect/README.aconnect	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,46 @@
+================================================================
+	aconnect - control subscriptions
+		ver.0.1.3
+	Copyright (C) 1999-2000 Takashi Iwai
+================================================================
+
+aconnect is a utility to control subscriptions of two ports as the
+third "manager" client.
+
+For example, the following connects two ports, from 64:0 to 65:0.
+
+	% aconnect 64:0 65:0
+
+To disconnect the existing subscription, use -d option.
+
+	% aconnect -d 64:0 65:0
+
+To see which port is available as input port, run the following
+command:
+
+	% aconnect -i
+	client 0: 'System' [type=kernel]
+	    0 'Timer           '
+	    1 'Announce        '
+	client 64: '0: MIDI Synth' [type=kernel]
+	    0 'card 0: synth-midi: 0'
+
+Similary, to see the output ports, use -o flag.
+
+	% aconnect -o
+	client 64: '0: MIDI Synth' [type=kernel]
+	    0 'card 0: synth-midi: 0'
+	client 65: 'AWE Wave Table Synth : 0' [type=kernel]
+	    0 'Emu8000 port 0  '
+	    1 'Emu8000 port 1  '
+	    2 'Emu8000 port 2  '
+	    3 'Emu8000 port 3  '
+
+The option -l together with -i or -o shows subscribers for each port.
+
+Ports are connected exclusively when the option -e is specified.
+
+For modifying time-stamp with a queue, use -r or -t option followed by
+a queue index which updates the time-stamp.  Former uses real-time queue,
+while the latter uses tick queue.  The queue must be used (not necessarily
+owned) by the receiver client.
Index: debian/alsa-utils/seq/aconnect/aconnect.1
diff -u debian/alsa-utils/seq/aconnect/aconnect.1:1.3 debian/alsa-utils/seq/aconnect/aconnect.1:1.4
--- debian/alsa-utils/seq/aconnect/aconnect.1:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aconnect/aconnect.1	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,138 @@
+.TH aconnect 1 "August 31, 2000"
+.LO 1
+.SH NAME
+aconnect \- ALSA sequencer connection manager
+
+.SH SYNOPSIS
+.B aconnect
+[\-d] [-options] sender receiver
+.br
+.B aconnect
+\-i|-o [-options]
+.br
+.B aconnect
+\-x
+
+.SH DESCRIPTION
+.B aconnect
+is a utility to connect and disconnect two existing ports on ALSA sequencer
+system.
+The ports with the arbitrary subscription permission, such as created
+by
+.B aseqview(1),
+can be connected to any (MIDI) device ports using
+.B aconnect.
+For example, to connect from port 64:0 to 65:0, run as follows:
+.IP "" 4
+% aconnect 64:0 65:0
+.PP
+The connection is one-way, and the whole data to the sender port (64:0)
+is redirected to the receiver port (65:0).  When another port (e.g. 65:1)
+is attached to the same sender port, the data is sent to both receiver
+ports.
+For disconnection, use
+.B \-d
+option.
+.IP "" 4
+% aconnect -d 64:0 65:0
+.PP
+The address can be given using the client's name.
+.IP "" 4
+% aconnect External:0 Emu8000:1
+.PP
+Then the port 0 of the client matching with the string "External" is
+connected to the port 1 of the client matching with the "Emu8000".
+.PP
+Another function of
+.B aconnect
+is to list the present ports
+on the given condition.
+The input ports, which may become
+.I sender
+ports, can be listed with
+.B \-i
+option.
+.IP "" 4
+% aconnect -i
+.br
+client 0: 'System' [type=kernel]
+.in +4
+0 'Timer           '
+.br
+1 'Announce        '
+.in -4
+client 64: 'External MIDI-0' [type=kernel]
+.in +4
+0 'MIDI 0-0        '
+.in -4
+.PP
+Similary, to see the output ports, use
+.B \-o
+flag.
+.PP
+You can remove all existing exported connections using
+.B \-x
+option.  This function is useful for terminating the ALSA drivers,
+because the modules with sequencer connections cannot be unloaded
+unless their connections are removed.
+
+.SH OPTIONS
+.SS CONNNECTION MANAGEMENT
+.TP
+.B \-d, --disconnect
+Disconnect the given subscription.
+.TP
+.B \-e, --exclusive
+Connect ports with exclusvie mode.
+Both sender and receiver ports can be no longer connected by any other ports.
+.TP
+.B \-r, --real queue
+Convert time-stamps of event packets to the current value of the given
+.I real-time
+queue.
+This is option is, however, not so useful, since
+the receiver port must use (not necessarily own) the specified queue.
+.TP
+.B \-t, --tick queue
+Like
+.B -r
+option, but 
+time-stamps are converted to the current value of the given
+.I tick
+queue.
+
+.SS LIST PORTS
+.TP
+.B \-i, --input
+List existing input (readable) ports.
+This option is exclusive to
+.B \-o.
+.TP
+.B \-o, --output
+List existing output (writable) ports.
+This option is exclusive to
+.B \-i.
+.TP
+.B \-l, --list
+List the current connection status.  The connected and connecting ports
+from/to each port are listed together.
+The suffix flag
+.B [ex]
+means the connection is exclusive.
+The suffix flag
+.B [real:#]
+and
+.B [tick:#]
+mean the connection includes real-time and tick conversion on the listed
+queue, respectively.
+
+.SS REMOVE ALL CONNECTIONS
+.TP
+.B \-x, --removeall
+Remove all exported connections.
+
+.SH "SEE ALSO"
+aseqnet(1), aseqview(1)
+
+.SH AUTHOR
+Takashi Iwai <tiwai@suse.de>
Index: debian/alsa-utils/seq/aconnect/aconnect.c
diff -u debian/alsa-utils/seq/aconnect/aconnect.c:1.3 debian/alsa-utils/seq/aconnect/aconnect.c:1.4
--- debian/alsa-utils/seq/aconnect/aconnect.c:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aconnect/aconnect.c	Tue Feb  3 20:52:00 2004
@@ -0,0 +1,402 @@
+/*
+ * connect / disconnect two subscriber ports
+ *   ver.0.1.3
+ *
+ * Copyright (C) 1999 Takashi Iwai
+ * 
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ * 
+ *  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.
+ *
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <stdarg.h>
+#include <sys/ioctl.h>
+#include <alsa/asoundlib.h>
+
+static void error_handler(const char *file, int line, const char *function, int err, const char *fmt, ...)
+{
+	va_list arg;
+
+	if (err == ENOENT)	/* Ignore those misleading "warnings" */
+		return;
+	va_start(arg, fmt);
+	fprintf(stderr, "ALSA lib %s:%i:(%s) ", file, line, function);
+	vfprintf(stderr, fmt, arg);
+	if (err)
+		fprintf(stderr, ": %s", snd_strerror(err));
+	putc('\n', stderr);
+	va_end(arg);
+}
+
+static void usage(void)
+{
+	fprintf(stderr, "aconnect - ALSA sequencer connection manager\n");
+	fprintf(stderr, "Copyright (C) 1999-2000 Takashi Iwai\n");
+	fprintf(stderr, "Usage:\n");
+	fprintf(stderr, " * Connection/disconnection betwen two ports\n");
+	fprintf(stderr, "   aconnect [-options] sender receiver\n");
+	fprintf(stderr, "     sender, receiver = client:port pair\n");
+	fprintf(stderr, "     -d,--disconnect     disconnect\n");
+	fprintf(stderr, "     -e,--exclusive      exclusive connection\n");
+	fprintf(stderr, "     -r,--real #         convert real-time-stamp on queue\n");
+	fprintf(stderr, "     -t,--tick #         convert tick-time-stamp on queue\n");
+	fprintf(stderr, " * List connected ports (no subscription action)\n");
+	fprintf(stderr, "   aconnect -i|-o [-options]\n");
+	fprintf(stderr, "     -i,--input          list input (readable) ports\n");
+	fprintf(stderr, "     -o,--output         list output (writable) ports\n");
+	fprintf(stderr, "     -l,--list           list current connections of each port\n");
+	fprintf(stderr, " * Remove all exported connections\n");
+	fprintf(stderr, "     -x, --removeall\n");
+}
+
+/*
+ * check permission (capability) of specified port
+ */
+
+#define LIST_INPUT	1
+#define LIST_OUTPUT	2
+
+#define perm_ok(pinfo,bits) ((snd_seq_port_info_get_capability(pinfo) & (bits)) == (bits))
+
+static int check_permission(snd_seq_port_info_t *pinfo, int perm)
+{
+	if (perm) {
+		if (perm & LIST_INPUT) {
+			if (perm_ok(pinfo, SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ))
+				goto __ok;
+		}
+		if (perm & LIST_OUTPUT) {
+			if (perm_ok(pinfo, SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE))
+				goto __ok;
+		}
+		return 0;
+	}
+ __ok:
+	if (snd_seq_port_info_get_capability(pinfo) & SND_SEQ_PORT_CAP_NO_EXPORT)
+		return 0;
+	return 1;
+}
+
+/*
+ * list subscribers of specified type
+ */
+static void list_each_subs(snd_seq_t *seq, snd_seq_query_subscribe_t *subs, int type, const char *msg)
+{
+	int count = 0;
+	snd_seq_query_subscribe_set_type(subs, type);
+	snd_seq_query_subscribe_set_index(subs, 0);
+	while (snd_seq_query_port_subscribers(seq, subs) >= 0) {
+		const snd_seq_addr_t *addr;
+		if (count++ == 0)
+			printf("\t%s: ", msg);
+		else
+			printf(", ");
+		addr = snd_seq_query_subscribe_get_addr(subs);
+		printf("%d:%d", addr->client, addr->port);
+		if (snd_seq_query_subscribe_get_exclusive(subs))
+			printf("[ex]");
+		if (snd_seq_query_subscribe_get_time_update(subs))
+			printf("[%s:%d]",
+			       (snd_seq_query_subscribe_get_time_real(subs) ? "real" : "tick"),
+			       snd_seq_query_subscribe_get_queue(subs));
+		snd_seq_query_subscribe_set_index(subs, snd_seq_query_subscribe_get_index(subs) + 1);
+	}
+	if (count > 0)
+		printf("\n");
+}
+
+/*
+ * list subscribers
+ */
+static void list_subscribers(snd_seq_t *seq, const snd_seq_addr_t *addr)
+{
+	snd_seq_query_subscribe_t *subs;
+	snd_seq_query_subscribe_alloca(&subs);
+	snd_seq_query_subscribe_set_root(subs, addr);
+	list_each_subs(seq, subs, SND_SEQ_QUERY_SUBS_READ, "Connecting To");
+	list_each_subs(seq, subs, SND_SEQ_QUERY_SUBS_WRITE, "Connected From");
+}
+
+/*
+ * search all ports
+ */
+typedef void (*action_func_t)(snd_seq_t *seq, snd_seq_client_info_t *cinfo, snd_seq_port_info_t *pinfo, int count);
+
+static void do_search_port(snd_seq_t *seq, int perm, action_func_t do_action)
+{
+	snd_seq_client_info_t *cinfo;
+	snd_seq_port_info_t *pinfo;
+	int count;
+
+	snd_seq_client_info_alloca(&cinfo);
+	snd_seq_port_info_alloca(&pinfo);
+	snd_seq_client_info_set_client(cinfo, -1);
+	while (snd_seq_query_next_client(seq, cinfo) >= 0) {
+		/* reset query info */
+		snd_seq_port_info_set_client(pinfo, snd_seq_client_info_get_client(cinfo));
+		snd_seq_port_info_set_port(pinfo, -1);
+		count = 0;
+		while (snd_seq_query_next_port(seq, pinfo) >= 0) {
+			if (check_permission(pinfo, perm)) {
+				do_action(seq, cinfo, pinfo, count);
+				count++;
+			}
+		}
+	}
+}
+
+
+static void print_port(snd_seq_t *seq, snd_seq_client_info_t *cinfo,
+		       snd_seq_port_info_t *pinfo, int count)
+{
+	if (! count) {
+		printf("client %d: '%s' [type=%s]\n",
+		       snd_seq_client_info_get_client(cinfo),
+		       snd_seq_client_info_get_name(cinfo),
+		       (snd_seq_client_info_get_type(cinfo) == SND_SEQ_USER_CLIENT ? "user" : "kernel"));
+	}
+	printf("  %3d '%-16s'\n",
+	       snd_seq_port_info_get_port(pinfo),
+	       snd_seq_port_info_get_name(pinfo));
+}
+
+static void print_port_and_subs(snd_seq_t *seq, snd_seq_client_info_t *cinfo,
+				snd_seq_port_info_t *pinfo, int count)
+{
+	print_port(seq, cinfo, pinfo, count);
+	list_subscribers(seq, snd_seq_port_info_get_addr(pinfo));
+}
+
+
+/*
+ * remove all (exported) connections
+ */
+static void remove_connection(snd_seq_t *seq, snd_seq_client_info_t *cinfo,
+			      snd_seq_port_info_t *pinfo, int count)
+{
+	snd_seq_query_subscribe_t *query;
+
+	snd_seq_query_subscribe_alloca(&query);
+	snd_seq_query_subscribe_set_root(query, snd_seq_port_info_get_addr(pinfo));
+
+	snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_READ);
+	snd_seq_query_subscribe_set_index(query, 0);
+	for (; snd_seq_query_port_subscribers(seq, query) >= 0;
+	     snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1)) {
+		snd_seq_port_info_t *port;
+		snd_seq_port_subscribe_t *subs;
+		const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_root(query);
+		const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_addr(query);
+		snd_seq_port_info_alloca(&port);
+		if (snd_seq_get_any_port_info(seq, dest->client, dest->port, port) < 0)
+			continue;
+		if (!(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_WRITE))
+			continue;
+		if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
+			continue;
+		snd_seq_port_subscribe_alloca(&subs);
+		snd_seq_port_subscribe_set_queue(subs, snd_seq_query_subscribe_get_queue(query));
+		snd_seq_port_subscribe_set_sender(subs, sender);
+		snd_seq_port_subscribe_set_dest(subs, dest);
+		snd_seq_unsubscribe_port(seq, subs);
+	}
+
+	snd_seq_query_subscribe_set_type(query, SND_SEQ_QUERY_SUBS_WRITE);
+	snd_seq_query_subscribe_set_index(query, 0);
+	for (; snd_seq_query_port_subscribers(seq, query) >= 0;
+	     snd_seq_query_subscribe_set_index(query, snd_seq_query_subscribe_get_index(query) + 1)) {
+		snd_seq_port_info_t *port;
+		snd_seq_port_subscribe_t *subs;
+		const snd_seq_addr_t *dest = snd_seq_query_subscribe_get_root(query);
+		const snd_seq_addr_t *sender = snd_seq_query_subscribe_get_addr(query);
+		snd_seq_port_info_alloca(&port);
+		if (snd_seq_get_any_port_info(seq, sender->client, sender->port, port) < 0)
+			continue;
+		if (!(snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_SUBS_READ))
+			continue;
+		if (snd_seq_port_info_get_capability(port) & SND_SEQ_PORT_CAP_NO_EXPORT)
+			continue;
+		snd_seq_port_subscribe_alloca(&subs);
+		snd_seq_port_subscribe_set_queue(subs, snd_seq_query_subscribe_get_queue(query));
+		snd_seq_port_subscribe_set_sender(subs, sender);
+		snd_seq_port_subscribe_set_dest(subs, dest);
+		snd_seq_unsubscribe_port(seq, subs);
+	}
+}
+
+static void remove_all_connections(snd_seq_t *seq)
+{
+	do_search_port(seq, 0, remove_connection);
+}
+
+
+/*
+ * main..
+ */
+
+enum {
+	SUBSCRIBE, UNSUBSCRIBE, LIST, REMOVE_ALL
+};
+
+static struct option long_option[] = {
+	{"disconnect", 0, NULL, 'd'},
+	{"input", 0, NULL, 'i'},
+	{"output", 0, NULL, 'o'},
+	{"real", 1, NULL, 'r'},
+	{"tick", 1, NULL, 't'},
+	{"exclusive", 0, NULL, 'e'},
+	{"list", 0, NULL, 'l'},
+	{"removeall", 0, NULL, 'x'},
+	{NULL, 0, NULL, 0},
+};
+
+int main(int argc, char **argv)
+{
+	int c;
+	snd_seq_t *seq;
+	int queue = 0, convert_time = 0, convert_real = 0, exclusive = 0;
+	int command = SUBSCRIBE;
+	int list_perm = 0;
+	int client;
+	int list_subs = 0;
+	snd_seq_port_subscribe_t *subs;
+	snd_seq_addr_t sender, dest;
+
+	while ((c = getopt_long(argc, argv, "dior:t:elx", long_option, NULL)) != -1) {
+		switch (c) {
+		case 'd':
+			command = UNSUBSCRIBE;
+			break;
+		case 'i':
+			command = LIST;
+			list_perm |= LIST_INPUT;
+			break;
+		case 'o':
+			command = LIST;
+			list_perm |= LIST_OUTPUT;
+			break;
+		case 'e':
+			exclusive = 1;
+			break;
+		case 'r':
+			queue = atoi(optarg);
+			convert_time = 1;
+			convert_real = 1;
+			break;
+		case 't':
+			queue = atoi(optarg);
+			convert_time = 1;
+			convert_real = 0;
+			break;
+		case 'l':
+			list_subs = 1;
+			break;
+		case 'x':
+			command = REMOVE_ALL;
+			break;
+		default:
+			usage();
+			exit(1);
+		}
+	}
+
+	if (snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+		fprintf(stderr, "can't open sequencer\n");
+		return 1;
+	}
+	
+	snd_lib_error_set_handler(error_handler);
+
+	switch (command) {
+	case LIST:
+		do_search_port(seq, list_perm,
+			       list_subs ? print_port_and_subs : print_port);
+		snd_seq_close(seq);
+		return 0;
+	case REMOVE_ALL:
+		remove_all_connections(seq);
+		snd_seq_close(seq);
+		return 0;
+	}
+
+	/* connection or disconnection */
+
+	if (optind + 2 > argc) {
+		snd_seq_close(seq);
+		usage();
+		exit(1);
+	}
+
+	if ((client = snd_seq_client_id(seq)) < 0) {
+		snd_seq_close(seq);
+		fprintf(stderr, "can't get client id\n");
+		return 1;
+	}
+
+	/* set client info */
+	if (snd_seq_set_client_name(seq, "ALSA Connector") < 0) {
+		snd_seq_close(seq);
+		fprintf(stderr, "can't set client info\n");
+		return 1;
+	}
+
+	/* set subscription */
+	if (snd_seq_parse_address(seq, &sender, argv[optind]) < 0) {
+		snd_seq_close(seq);
+		fprintf(stderr, "invalid sender address %s\n", argv[optind]);
+		return 1;
+	}
+	if (snd_seq_parse_address(seq, &dest, argv[optind + 1]) < 0) {
+		snd_seq_close(seq);
+		fprintf(stderr, "invalid destination address %s\n", argv[optind + 1]);
+		return 1;
+	}
+	snd_seq_port_subscribe_alloca(&subs);
+	snd_seq_port_subscribe_set_sender(subs, &sender);
+	snd_seq_port_subscribe_set_dest(subs, &dest);
+	snd_seq_port_subscribe_set_queue(subs, queue);
+	snd_seq_port_subscribe_set_exclusive(subs, exclusive);
+	snd_seq_port_subscribe_set_time_update(subs, convert_time);
+	snd_seq_port_subscribe_set_time_real(subs, convert_real);
+
+	if (command == UNSUBSCRIBE) {
+		if (snd_seq_get_port_subscription(seq, subs) < 0) {
+			snd_seq_close(seq);
+			fprintf(stderr, "No subscription is found\n");
+			return 1;
+		}
+		if (snd_seq_unsubscribe_port(seq, subs) < 0) {
+			snd_seq_close(seq);
+			fprintf(stderr, "Disconnection failed (%s)\n", snd_strerror(errno));
+			return 1;
+		}
+	} else {
+		if (snd_seq_get_port_subscription(seq, subs) == 0) {
+			snd_seq_close(seq);
+			fprintf(stderr, "Connection is already subscribed\n");
+			return 1;
+		}
+		if (snd_seq_subscribe_port(seq, subs) < 0) {
+			snd_seq_close(seq);
+			fprintf(stderr, "Connection failed (%s)\n", snd_strerror(errno));
+			return 1;
+		}
+	}
+
+	snd_seq_close(seq);
+
+	return 0;
+}
Index: debian/alsa-utils/seq/aseqnet/Makefile.am
diff -u debian/alsa-utils/seq/aseqnet/Makefile.am:1.3 debian/alsa-utils/seq/aseqnet/Makefile.am:1.4
--- debian/alsa-utils/seq/aseqnet/Makefile.am:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aseqnet/Makefile.am	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,6 @@
+INCLUDES = -I$(top_srcdir)/include
+EXTRA_DIST = README.aseqnet aseqnet.1
+
+bin_PROGRAMS = aseqnet
+aseqnet_SOURCES = aseqnet.c
+man_MANS = aseqnet.1
Index: debian/alsa-utils/seq/aseqnet/Makefile.in
diff -u debian/alsa-utils/seq/aseqnet/Makefile.in:1.3 debian/alsa-utils/seq/aseqnet/Makefile.in:1.4
--- debian/alsa-utils/seq/aseqnet/Makefile.in:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aseqnet/Makefile.in	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,356 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+INCLUDES = -I$(top_srcdir)/include
+EXTRA_DIST = README.aseqnet aseqnet.1
+
+bin_PROGRAMS = aseqnet
+aseqnet_SOURCES = aseqnet.c
+man_MANS = aseqnet.1
+subdir = seq/aseqnet
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = aseqnet$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_aseqnet_OBJECTS = aseqnet.$(OBJEXT)
+aseqnet_OBJECTS = $(am_aseqnet_OBJECTS)
+aseqnet_LDADD = $(LDADD)
+aseqnet_DEPENDENCIES =
+aseqnet_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/include
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/aseqnet.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(aseqnet_SOURCES)
+
+NROFF = nroff
+MANS = $(man_MANS)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = $(aseqnet_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  seq/aseqnet/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+aseqnet$(EXEEXT): $(aseqnet_OBJECTS) $(aseqnet_DEPENDENCIES) 
+	@rm -f aseqnet$(EXEEXT)
+	$(LINK) $(aseqnet_LDFLAGS) $(aseqnet_OBJECTS) $(aseqnet_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/aseqnet.Po@am__quote@
+
+distclean-depend:
+	-rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+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/^.*\\.//'`; \
+	  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/^.*\\.//'`; \
+	  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
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(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 $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) $(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)$$unique$(LISP)$$tags" \
+	  || etags $(ETAGS_ARGS) $$tags  $$unique $(LISP)
+
+GTAGS:
+	here=`CDPATH=: && cd $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic distclean distclean-compile distclean-depend \
+	distclean-generic distclean-tags distdir dvi dvi-am info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-man1 install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+	uninstall-man1
+
+# 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:
Index: debian/alsa-utils/seq/aseqnet/README.aseqnet
diff -u debian/alsa-utils/seq/aseqnet/README.aseqnet:1.3 debian/alsa-utils/seq/aseqnet/README.aseqnet:1.4
--- debian/alsa-utils/seq/aseqnet/README.aseqnet:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aseqnet/README.aseqnet	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,53 @@
+================================================================
+	ALSA sequencer connectors over network
+		ver.0.1
+	Copyright (C) 1999-2000 Takashi Iwai
+================================================================
+
+* ASEQNET
+
+aseqnet is a sequencer client which sends/receives events over
+network.  Suppose two hosts (hostA and hostB) connected by network.
+You need to run ALSA system on both hosts.  Then, start aseqnet as a
+server on hostA:
+
+	hostA% aseqnet
+	sequencer opened: 128:0
+
+A user client 128 with port 0 was opened. (The client number may
+vary.)  At next, start client on hostB.  The argument is the hostname
+where server is running.
+
+	hostB% aseqnet hostA
+	sequencer opened: 132:0
+
+Now events sent to hostA:128:0 is transferred to hostB:132:0, and vice
+versa.
+
+You can connect these ports arbitrary to other sequencer ports.
+For example, connect hostB:132:0 to a MIDI output device 65:0.  The
+aconnect utility can be used for this:
+
+	hostB% aconnect 132:0 65:0
+
+Events to hostA:128:0 will be delivered indirectly to hostB:65:0.
+You'll hear MIDI sounds as following:
+
+	hostA% pmidi -p 128:0 foo.mid
+
+The multiple clients may exist simultaneously.  If hostC is connected
+as a client to hostA, events from from hostA are sent to all connected
+network clients, hostB and hostC.  However, only one connection is
+allowed from a client to a server.
+
+To disconnect network, stop all clients before server by ctrl-C or
+sending signal to them.  The server will automatically quit.
+
+The available options are:
+
+  -p port : specify the TCP port number or TCP service name.
+            Default value is 40002.
+  -s addr : explicit read-subscription to the given address
+            (client:addr).
+  -d addr : explicit write-subscription to the given address.
+  -v      : verbose mode.
Index: debian/alsa-utils/seq/aseqnet/aseqnet.1
diff -u debian/alsa-utils/seq/aseqnet/aseqnet.1:1.3 debian/alsa-utils/seq/aseqnet/aseqnet.1:1.4
--- debian/alsa-utils/seq/aseqnet/aseqnet.1:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aseqnet/aseqnet.1	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,81 @@
+.TH aseqnet 1 "January 1, 2000"
+.LO 1
+.SH NAME
+aseqnet \- ALSA sequencer connectors over network
+
+.SH SYNOPSIS
+.B aseqnet
+[remotehost]
+
+.SH DESCRIPTION
+.B aseqnet
+is an ALSA sequencer client which sends and receives event packets
+over network.
+Suppose two hosts connected by network,
+.I hostA
+as a server
+and
+.I hostB
+as a client.
+The ALSA sequencer system must be running on both hosts.
+For creating the server port, run the following on hostA:
+.IP "" 4
+hostA% aseqnet
+.br
+sequencer opened: 128:0
+.PP
+Then a user client 128 with port 0 was opened on hostA.
+(The client number may vary.)
+For creating the (network-)client port, run
+.B aseqnet
+with the hostname of the server:
+.IP "" 4
+hostB% aseqnet hostA
+.br
+sequencer opened: 132:0
+.PP
+Now all events sent to hostA:128:0 are transferred to hostB:132:0, and vice
+versa.
+.PP
+The ports created by
+.B aseqnet
+can be connected arbitrary to other sequencer ports via
+.B aconnect(1).
+For example, to connect hostB:132:0 to a MIDI output device 65:0:
+.IP "" 4
+hostB% aconnect 132:0 65:0
+.PP
+Then events to hostA:128:0 will be delivered to hostB:65:0.
+The following command plays MIDI on
+.I hostB.
+.IP "" 4
+hostA% pmidi -p 128:0 foo.mid
+.PP
+The multiple clients may exist simultaneously.  If
+.I hostC
+is connected as a client to hostA, events from from hostA are sent
+to all connected network clients, i.e. hostB and hostC.
+However, only one connection is allowed from a client to a server.
+.PP
+To disconnect network, stop all clients before server by ctrl-C or
+sending signal to them.  The server will automatically quit.
+
+.SH OPTIONS
+.TP
+.B \-p port
+Specify the TCP port number or TCP service name.
+.TP
+.B \-s addr
+Subscribe to the given address for read automatically.
+.TP
+.B \-d addr
+Subscribe to the given address for write automatically.
+.TP
+.B \-v
+Verbose mode.
+
+.SH "SEE ALSO"
+aconnect(1), pmidi(1)
+
+.SH AUTHOR
+Takashi Iwai <tiwai@suse.de>.
Index: debian/alsa-utils/seq/aseqnet/aseqnet.c
diff -u debian/alsa-utils/seq/aseqnet/aseqnet.c:1.3 debian/alsa-utils/seq/aseqnet/aseqnet.c:1.4
--- debian/alsa-utils/seq/aseqnet/aseqnet.c:1.3	Tue Feb  3 20:43:41 2004
+++ debian/alsa-utils/seq/aseqnet/aseqnet.c	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,600 @@
+/*
+ * network server/client for ALSA sequencer
+ *   ver.0.1
+ *
+ * Copyright (C) 1999-2000 Takashi Iwai
+ * 
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ * 
+ *  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.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <alsa/asoundlib.h>
+#include <getopt.h>
+#include <signal.h>
+
+/*
+ * prototypes
+ */
+static void usage(void);
+static void init_buf(void);
+static void init_pollfds(void);
+static void close_files(void);
+static void init_seq(char *source, char *dest);
+static int get_port(char *service);
+static void sigterm_exit(int sig);
+static void init_server(int port);
+static void init_client(char *server, int port);
+static void do_loop(void);
+static int copy_local_to_remote(void);
+static int copy_remote_to_local(int fd);
+
+/*
+ * default TCP port number
+ */
+#define DEFAULT_PORT	40002
+
+/*
+ * local input buffer
+ */
+static char *readbuf;
+static int max_rdlen;
+static char *writebuf;
+static int cur_wrlen, max_wrlen;
+
+#define MAX_BUF_EVENTS	200
+#define MAX_CONNECTION	10
+
+static snd_seq_t *handle;
+static struct pollfd *seqifds = NULL;
+static struct pollfd *seqofds = NULL;
+static struct pollfd *pollfds = NULL;
+static int seqifds_count = 0;
+static int seqofds_count = 0;
+static int pollfds_count = 0;
+static int sockfd, netfd[MAX_CONNECTION] = {[0 ... MAX_CONNECTION-1] = -1};
+static int max_connection;
+static int cur_connected;
+static int seq_port;
+
+static int server_mode;
+static int verbose = 0;
+static int info = 0;
+
+
+/*
+ * main routine
+ */
+
+static struct option long_option[] = {
+	{"port", 1, NULL, 'p'},
+	{"source", 1, NULL, 's'},
+	{"dest", 1, NULL, 'd'},
+	{"help", 0, NULL, 'h'},
+	{"verbose", 0, NULL, 'v'},
+	{"info", 0, NULL, 'i'},
+	{NULL, 0, NULL, 0},
+};
+
+int main(int argc, char **argv)
+{
+	int c;
+	int port = DEFAULT_PORT;
+	char *source = NULL, *dest = NULL;
+
+	while ((c = getopt_long(argc, argv, "p:s:d:vi", long_option, NULL)) != -1) {
+		switch (c) {
+		case 'p':
+			if (isdigit(*optarg))
+				port = atoi(optarg);
+			else
+				port = get_port(optarg);
+			break;
+		case 's':
+			source = optarg;
+			break;
+		case 'd':
+			dest = optarg;
+			break;
+		case 'v':
+			verbose++;
+			break;
+		case 'i':
+			info++;
+			break;
+		default:
+			usage();
+			exit(1);
+		}
+	}
+
+	signal(SIGINT, sigterm_exit);
+	signal(SIGTERM, sigterm_exit);
+
+	init_buf();
+	init_seq(source, dest);
+
+	if (optind >= argc) {
+		server_mode = 1;
+		max_connection = MAX_CONNECTION;
+		init_pollfds();
+		init_server(port);
+	} else {
+		server_mode = 0;
+		max_connection = 1;
+		init_pollfds();
+		init_client(argv[optind], port);
+	}
+
+	do_loop();
+
+	close_files();
+
+	return 0;
+}
+
+
+/*
+ * print usage
+ */
+static void usage(void)
+{
+	fprintf(stderr, "aseqnet - network client/server on ALSA sequencer\n");
+	fprintf(stderr, "  Copyright (C) 1999 Takashi Iwai\n");
+	fprintf(stderr, "usage:\n");
+	fprintf(stderr, "  server mode: aseqnet [-options]\n");
+	fprintf(stderr, "  client mode: aseqnet [-options] server_host\n");
+	fprintf(stderr, "options:\n");
+	fprintf(stderr, "  -p,--port # : sepcify TCP port (digit or service name)\n");
+	fprintf(stderr, "  -s,--source addr : read from given addr (client:port)\n");
+	fprintf(stderr, "  -d,--dest addr : write to given addr (client:port)\n");
+	fprintf(stderr, "  -v, --verbose : print verbose messages\n");
+	fprintf(stderr, "  -i, --info : print certain received events\n");
+}
+
+
+/*
+ * allocate and initialize buffers
+ */
+static void init_buf(void)
+{
+	max_wrlen = MAX_BUF_EVENTS * sizeof(snd_seq_event_t);
+	max_rdlen = MAX_BUF_EVENTS * sizeof(snd_seq_event_t);
+	writebuf = malloc(max_wrlen);
+	readbuf = malloc(max_rdlen);
+	if (writebuf == NULL || readbuf == NULL) {
+		fprintf(stderr, "can't malloc\n");
+		exit(1);
+	}
+	memset(writebuf, 0, max_wrlen);
+	memset(readbuf, 0, max_rdlen);
+	cur_wrlen = 0;
+}
+
+/*
+ * allocate and initialize poll array
+ */
+static void init_pollfds(void)
+{
+	pollfds_count = seqifds_count + seqofds_count + 1 + max_connection;
+	pollfds = (struct pollfd *)calloc(pollfds_count, sizeof(struct pollfd));
+	assert(pollfds);
+}
+
+/*
+ * close all files
+ */
+static void close_files(void)
+{
+	int i;
+	if (verbose)
+		fprintf(stderr, "closing files..\n");
+	for (i = 0; i < max_connection; i++) {
+		if (netfd[i] >= 0)
+			close(netfd[i]);
+	}
+	if (sockfd >= 0)
+		close(sockfd);
+}
+
+
+/*
+ * initialize sequencer
+ */
+static void init_seq(char *source, char *dest)
+{
+	snd_seq_addr_t addr;
+	int err, counti, counto;
+
+	if (snd_seq_open(&handle, "default", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+		perror("snd_seq_open");
+		exit(1);
+	}
+	if (seqifds)
+		free(seqifds);
+	if (seqofds)
+		free(seqofds);
+	counti = seqifds_count = snd_seq_poll_descriptors_count(handle, POLLIN);
+	assert(counti > 0);
+	counto = seqofds_count = snd_seq_poll_descriptors_count(handle, POLLOUT);
+	assert(counto > 0);
+	seqifds = (struct pollfd *)calloc(counti, sizeof(struct pollfd));
+	assert(seqifds);
+	seqofds = (struct pollfd *)calloc(counto, sizeof(struct pollfd));
+	assert(seqofds);
+	err = snd_seq_poll_descriptors(handle, seqifds, counti, POLLIN);
+	assert(err == counti);
+	err = snd_seq_poll_descriptors(handle, seqofds, counto, POLLOUT);
+	assert(err == counto);
+
+	snd_seq_nonblock(handle, 1);
+
+	/* set client info */
+	if (server_mode)
+		snd_seq_set_client_name(handle, "Net Server");
+	else
+		snd_seq_set_client_name(handle, "Net Client");
+
+	/* create a port */
+	seq_port = snd_seq_create_simple_port(handle, "Network",
+					      SND_SEQ_PORT_CAP_READ |
+					      SND_SEQ_PORT_CAP_WRITE |
+					      SND_SEQ_PORT_CAP_SUBS_READ |
+					      SND_SEQ_PORT_CAP_SUBS_WRITE,
+					      SND_SEQ_PORT_TYPE_MIDI_GENERIC);
+	if (seq_port < 0) {
+		perror("create seq port");
+		exit(1);
+	}
+	if (verbose)
+		fprintf(stderr, "sequencer opened: %d:%d\n",
+			snd_seq_client_id(handle), seq_port);
+
+	/* explicit subscriptions */
+	if (source) {
+		/* read subscription */
+		if (snd_seq_parse_address(handle, &addr, source) < 0) {
+			fprintf(stderr, "invalid source address %s\n", source);
+			exit(1);
+		}
+		if (snd_seq_connect_from(handle, seq_port, addr.client, addr.port)) {
+			perror("read subscription");
+			exit(1);
+		}
+	}
+	if (dest) {
+		/* write subscription */
+		if (snd_seq_parse_address(handle, &addr, dest) < 0) {
+			fprintf(stderr, "invalid destination address %s\n", dest);
+			exit(1);
+		}
+		if (snd_seq_connect_to(handle, seq_port, addr.client, addr.port)) {
+			perror("write subscription");
+			exit(1);
+		}
+	}
+}
+
+
+/*
+ * convert from string to TCP port number
+ */
+static int get_port(char *service)
+{
+	struct servent *sp;
+
+	if ((sp = getservbyname(service, "tcp")) == NULL){
+		fprintf(stderr, "service '%s' is not found in /etc/services\n", service);
+		return -1;
+	}
+	return sp->s_port;
+}
+
+/*
+ * signal handler
+ */
+static void sigterm_exit(int sig)
+{
+	close_files();
+	exit(1);
+}
+
+
+/*
+ * initialize network server
+ */
+static void init_server(int port)
+{
+	int i;
+	int curstate = 1;
+	struct sockaddr_in addr;
+
+	memset(&addr, 0, sizeof(addr));
+
+	addr.sin_family = AF_INET;
+	addr.sin_addr.s_addr = INADDR_ANY;
+	addr.sin_port = htons(port);
+
+	sockfd = socket(AF_INET, SOCK_STREAM, 0);
+	if (sockfd < 0)  {
+		perror("create socket");
+		exit(1);
+	}
+	setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &curstate, sizeof(curstate));
+	/* the return value is ignored.. */
+
+	if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0)  {
+		perror("can't bind");
+		exit(1);
+	}
+
+	if (listen(sockfd, 5) < 0)  {
+		perror("can't listen");
+		exit(1);
+	}
+
+	cur_connected = 0;
+	for (i = 0; i < max_connection; i++)
+		netfd[i] = -1;
+}
+
+/*
+ * start connection on server
+ */
+static void start_connection(void)
+{
+	struct sockaddr_in addr;
+	int i;
+	int addr_len;
+
+	for (i = 0; i < max_connection; i++) {
+		if (netfd[i] < 0)
+			break;
+	}
+	if (i >= max_connection) {
+		fprintf(stderr, "too many connections!\n");
+		exit(1);
+	}
+	memset(&addr, 0, sizeof(addr));
+	addr_len = sizeof(addr);
+	netfd[i] = accept(sockfd, (struct sockaddr *)&addr, &addr_len);
+	if (netfd[i] < 0) {
+		perror("accept");
+		exit(1);
+	}
+	if (verbose)
+		fprintf(stderr, "accepted[%d]\n", netfd[i]);
+	cur_connected++;
+}
+
+/*
+ * initialize network client
+ */
+static void init_client(char *server, int port)
+{
+	struct sockaddr_in addr;
+	struct hostent *host;
+	int curstate = 1;
+	int fd;
+
+	if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
+		perror("create socket");
+		exit(1);
+	}
+	if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &curstate, sizeof(curstate)) < 0) {
+		perror("setsockopt");
+		exit(1);
+	}
+	if ((host = gethostbyname(server)) == NULL){
+		fprintf(stderr,"can't get address %s\n", server);
+		exit(1);
+	}
+	addr.sin_port = htons(port);
+	addr.sin_family = AF_INET;
+	memcpy(&addr.sin_addr, host->h_addr, host->h_length);
+	if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+		perror("connect");
+		exit(1);
+	}
+	if (verbose)
+		fprintf(stderr, "ok.. connected\n");
+	netfd[0] = fd;
+	cur_connected = 1;
+}
+
+/*
+ * event loop
+ */
+static void do_loop(void)
+{
+	int i, rc, width;
+	int seqifd_ptr, sockfd_ptr = -1, netfd_ptr;
+
+	for (;;) {
+		memset(pollfds, 0, pollfds_count * sizeof(struct pollfd));
+		seqifd_ptr = 0;
+		memcpy(pollfds, seqifds, sizeof(*seqifds)*(width = seqifds_count));
+		if (server_mode) {
+			sockfd_ptr = width;
+			pollfds[width].fd = sockfd;
+			pollfds[width].events = POLLIN;
+			width++;
+		}
+		netfd_ptr = width;
+		for (i = 0; i < max_connection; i++) {
+			if (netfd[i] >= 0) {
+				pollfds[width].fd = netfd[i];
+				pollfds[width].events = POLLIN;
+				width++;
+			}
+		}
+		do {
+			rc = poll(pollfds, width, -1);
+		} while (rc <= 0 && errno == EINTR);
+		if (rc <= 0) {
+			perror("poll");
+			exit(1);
+		}
+		if (server_mode) {
+			if (pollfds[sockfd_ptr].revents & (POLLIN|POLLOUT))
+				start_connection();
+		}
+		for (i = 0; i < seqifds_count; i++)
+			if (pollfds[seqifd_ptr + i].revents & (POLLIN|POLLOUT)) {
+				if (copy_local_to_remote())
+					return;
+				break;
+			}
+		for (i = 0; i < max_connection; i++) {
+			if (netfd[i] < 0)
+				continue;
+			if (pollfds[netfd_ptr + i].revents & (POLLIN|POLLOUT)) {
+				if (copy_remote_to_local(netfd[i])) {
+					netfd[i] = -1;
+					cur_connected--;
+					if (cur_connected <= 0)
+						return;
+				}
+			}
+		}
+	}
+}
+
+
+/*
+ * flush write buffer - send data to the socket
+ */
+static void flush_writebuf(void)
+{
+	if (cur_wrlen) {
+		int i;
+		for (i = 0; i < max_connection; i++) {
+			if (netfd[i] >= 0)
+				write(netfd[i], writebuf, cur_wrlen);
+		}
+		cur_wrlen = 0;
+	}
+}
+
+/*
+ * get space from write buffer
+ */
+static char *get_writebuf(int len)
+{
+	char *buf;
+	if (cur_wrlen + len >= max_wrlen)
+		flush_writebuf();
+	buf = writebuf + cur_wrlen;
+	cur_wrlen += len;
+	return buf;
+}
+
+static void print_event(snd_seq_event_t *ev)
+{
+	switch (ev->type) {
+	case SND_SEQ_EVENT_CONTROLLER: 
+		printf("Channel %2d: Control event : %5d\n",
+			ev->data.control.channel, ev->data.control.value);
+		break;
+	case SND_SEQ_EVENT_PITCHBEND:
+		printf("Channel %2d: Pitchbender   : %5d\n", 
+			ev->data.control.channel, ev->data.control.value);
+		break;
+	case SND_SEQ_EVENT_NOTEON:
+		printf("Channel %2d: Note On event : %5d\n",
+			ev->data.control.channel, ev->data.note.note);
+		break;        
+	case SND_SEQ_EVENT_NOTEOFF: 
+		printf("Channel %2d: Note Off event: %5d\n",         
+			ev->data.control.channel, ev->data.note.note);           
+		break;        
+	}
+}
+
+#define EVENT_PACKET_SIZE	32
+
+/*
+ * copy events from sequencer to port(s)
+ */
+static int copy_local_to_remote(void)
+{
+	int rc;
+	snd_seq_event_t *ev;
+	char *buf;
+
+	while ((rc = snd_seq_event_input(handle, &ev)) >= 0 && ev) {
+		if (ev->type >= SND_SEQ_EVENT_CLIENT_START &&
+		    ! snd_seq_ev_is_variable_type(ev)) {
+			snd_seq_free_event(ev);
+			continue;
+		}
+		if (snd_seq_ev_is_variable(ev)) {
+			int len;
+			len = EVENT_PACKET_SIZE + ev->data.ext.len;
+			buf = get_writebuf(len);
+			memcpy(buf, ev, sizeof(snd_seq_event_t));
+			memcpy(buf + EVENT_PACKET_SIZE, ev->data.ext.ptr, ev->data.ext.len);
+		} else {
+			buf = get_writebuf(EVENT_PACKET_SIZE);
+			memcpy(buf, ev, EVENT_PACKET_SIZE);
+		}
+		if (info)
+			print_event(ev);
+		snd_seq_free_event(ev);
+	}
+	flush_writebuf();
+	return 0;
+}
+
+/*
+ * copy events from a port to sequencer
+ */
+static int copy_remote_to_local(int fd)
+{
+	int count;
+	char *buf;
+	snd_seq_event_t *ev;
+
+	count = read(fd, readbuf, MAX_BUF_EVENTS * sizeof(snd_seq_event_t));
+	buf = readbuf;
+
+	if (count == 0) {
+		if (verbose)
+			fprintf(stderr, "disconnected\n");
+		return 1;
+	}
+
+	while (count > 0) {
+		ev = (snd_seq_event_t*)buf;
+		buf += EVENT_PACKET_SIZE;
+		count -= EVENT_PACKET_SIZE;
+		if (snd_seq_ev_is_variable(ev) && ev->data.ext.len > 0) {
+			ev->data.ext.ptr = buf;
+			buf += ev->data.ext.len;
+			count -= ev->data.ext.len;
+		}
+		snd_seq_ev_set_direct(ev);
+		snd_seq_ev_set_source(ev, seq_port);
+		snd_seq_ev_set_subs(ev);
+		if (info)
+			print_event(ev);
+		snd_seq_event_output(handle, ev);
+	}
+
+	snd_seq_drain_output(handle);
+	return 0;
+}
+
Index: debian/alsa-utils/utils/Makefile.am
diff -u debian/alsa-utils/utils/Makefile.am:1.3 debian/alsa-utils/utils/Makefile.am:1.4
--- debian/alsa-utils/utils/Makefile.am:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/utils/Makefile.am	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,4 @@
+EXTRA_DIST = buildrpm
+
+rpm: buildrpm alsa-lib.spec
+	VERSION=$(VERSION) $(srcdir)/buildrpm
Index: debian/alsa-utils/utils/Makefile.in
diff -u debian/alsa-utils/utils/Makefile.in:1.3 debian/alsa-utils/utils/Makefile.in:1.4
--- debian/alsa-utils/utils/Makefile.in:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/utils/Makefile.in	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,203 @@
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+# 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@
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+ALSA_CFLAGS = @ALSA_CFLAGS@
+ALSA_LIBS = @ALSA_LIBS@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CURSESINC = @CURSESINC@
+CURSESLIB = @CURSESLIB@
+DEPDIR = @DEPDIR@
+EXEEXT = @EXEEXT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LN_S = @LN_S@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+SND_UTIL_MAJOR = @SND_UTIL_MAJOR@
+SND_UTIL_MINOR = @SND_UTIL_MINOR@
+SND_UTIL_SUBMINOR = @SND_UTIL_SUBMINOR@
+SND_UTIL_VERSION = @SND_UTIL_VERSION@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+EXTRA_DIST = buildrpm
+subdir = utils
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/include/aconfig.h
+CONFIG_CLEAN_FILES = alsa-utils.spec
+DIST_SOURCES =
+DIST_COMMON = Makefile.am Makefile.in alsa-utils.spec.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign  utils/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && \
+	  CONFIG_HEADERS= CONFIG_LINKS= \
+	  CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+alsa-utils.spec: $(top_builddir)/config.status alsa-utils.spec.in
+	cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@for file in $(DISTFILES); do \
+	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    $(mkinstalldirs) "$(distdir)/$$dir"; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    cp -pR $$d/$$file $(distdir) \
+	    || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+
+installdirs:
+
+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)" \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic uninstall uninstall-am uninstall-info-am
+
+
+rpm: buildrpm alsa-lib.spec
+	VERSION=$(VERSION) $(srcdir)/buildrpm
+# 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:
Index: debian/alsa-utils/utils/alsa-utils.spec.in
diff -u debian/alsa-utils/utils/alsa-utils.spec.in:1.3 debian/alsa-utils/utils/alsa-utils.spec.in:1.4
--- debian/alsa-utils/utils/alsa-utils.spec.in:1.3	Tue Feb  3 20:43:43 2004
+++ debian/alsa-utils/utils/alsa-utils.spec.in	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,63 @@
+%define ver      @VERSION@
+%define rel      1
+
+Summary: Advanced Linux Sound Architecture (ALSA) - Utils
+Name: alsa-utils
+Version: %ver
+Release: %rel
+Copyright: GPL
+Group: System/Libraries
+Source: ftp://ftp.alsa-project.org/pub/utils/alsa-utils-%{ver}.tar.bz2
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+URL: http://www.alsa-project.org
+Requires: alsa-lib ncurses
+BuildRequires: alsa-lib-devel ncurses-devel
+
+%description
+
+Advanced Linux Sound Architecture (ALSA) - Utils
+
+%changelog
+* Thu Mar  6 2003 Ronny V. Vindenes <sublett@dc-s.com>
+
+- removed wrongly included doc file
+- changed BuildRoot from /var/tmp to %{_tmppath}
+- use standard rpm macros for %build & %install
+- updated dependencies
+
+* Tue Nov 20 2001 Jaroslav Kysela <perex@suse.cz>
+
+- changed BuildRoot from /tmp to /var/tmp
+- %_prefix and %_mandir macros are used for configure and mkdir
+- DESTDIR is used for make install
+
+* Sun Nov 11 2001 Miroslav Benes <mbenes@tenez.cz>
+
+- dangerous command "rpm -rf $RPM_BUILD_ROOT" checks $RPM_BUILD_ROOT variable
+- unset key "Docdir" - on some new systems are documentation in /usr/share/doc
+
+* Mon May 28 1998 Helge Jensen <slog@slog.dk>
+
+- Made SPEC file
+
+%prep
+%setup
+%build
+%configure
+make
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+%makeinstall
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-, root, root)
+
+%doc ChangeLog COPYING README
+
+%{_prefix}/sbin/*
+%{_prefix}/bin/*
+%{_mandir}/man1/*
Index: debian/alsa-utils/utils/buildrpm
diff -u debian/alsa-utils/utils/buildrpm:1.3 debian/alsa-utils/utils/buildrpm:1.4
--- debian/alsa-utils/utils/buildrpm:1.3	Tue Feb  3 20:37:12 2004
+++ debian/alsa-utils/utils/buildrpm	Tue Feb  3 20:52:01 2004
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+source=.
+version=`cat $source/../version`
+package=$source/../alsa-utils-$version.tar.bz2
+packagedir=/usr/src/redhat
+
+# SuSE path
+if [ -d /usr/src/packages ]; then
+  packagedir=/usr/src/packages
+fi
+
+make -C .. clean
+make -C .. dist
+
+if [ ! -r $package ]; then
+  echo "Error: wrong package: $package"
+  exit 1
+fi
+
+cp -fv $package ${packagedir}/SOURCES
+
+if [ ! -r $source/buildrpm ]; then
+  echo "Error: invalid directory: $source"
+  exit 1
+fi
+
+if [ ! -d ${packagedir} ]; then
+  echo "Error: ${packagedir} directory not found"
+  exit 1
+fi
+
+if [ ! -r $source/alsadriver.spec ]; then
+  cd $source/..
+  ./configure
+  cd utils
+fi
+
+cp -fv $source/alsa-utils.spec ${packagedir}/SPECS
+cd ${packagedir}/SPECS
+rpm -ba alsa-utils.spec
+cd ${packagedir}