diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..6fb6b79
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,105 @@
+#
+#    Copyright (c) 2010-2011 Nest, Inc.
+#    All rights reserved.
+#
+#    This document is the property of Nest. It is considered
+#    confidential and proprietary information.
+#
+#    This document may not be reproduced or transmitted in any form,
+#    in whole or in part, without the express written permission of
+#    Nest.
+#
+#    Description:
+#      This file is the make file for beep, a basic application that
+#      allows for driving a Linux input subsystem-compatible speaker or
+#      piezo by specifying pitch, duration and repetitions.
+#
+
+BuildConfigSpecialized	:= No
+BuildProductSpecialized	:= No
+
+include pre.mak
+
+PackageName		:= beep
+
+PackageExtension	:= tar.gz
+PackageSeparator	:= -
+
+PackagePatchArgs	:=
+
+PackageArchive		:= $(PackageName).$(PackageExtension)
+PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)
+
+PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)
+
+LicenseSourceFile	:= $(PackageSourceDir)/COPYING
+
+CleanPaths		+= $(PackageLicenseFile)
+
+LinuxHeaderDir		:= $(call GenerateResultPaths,sw/tps/linux,include)
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+$(LicenseSourceFile): source
+
+$(PackageLicenseFile): $(LicenseSourceFile)
+	$(copy-result)
+
+# Extract the source from the archive and apply patches, if any.
+
+$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
+	$(expand-and-patch-package)
+
+# Prepare the sources.
+
+.PHONY: source
+source: | $(PackageSourceDir)
+
+# Patch the sources, if necessary.
+
+.PHONY: patch
+patch: source
+
+# Generate the package build makefile.
+
+$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory)
+	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))
+
+# Configure the source for building.
+
+.PHONY: configure
+configure: source $(PackageBuildMakefile)
+
+# Build the source.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+.PHONY: build
+build: configure | $(BuildDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
+	CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
+	CFLAGS="-I$(LinuxHeaderDir)" \
+	default
+
+# Stage the build to a temporary installation area.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+.PHONY: stage
+stage: build | $(ResultDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
+	INSTALL_PREFIX=$(ResultDirectory) \
+	install
+
+clean:
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)
+
+include post.mak
diff --git a/beep-1.3/CHANGELOG b/beep-1.3/CHANGELOG
new file mode 100644
index 0000000..3be8ce7
--- /dev/null
+++ b/beep-1.3/CHANGELOG
@@ -0,0 +1,72 @@
+1.3
+---
+- 8 years have passed!
+- Integrated a bunch of Gerfried Fuchs' changes maintained for the debian version for years
+and years
+- Added him to the CREDITS, too.
+- Support for devfs, and alternate console devices.
+- Warnings about multiply-specified frequency
+- Debug mode
+
+1.2.2
+-----
+- Man pages now gzip -9 for better compression
+- Table of frequencies added to man page
+- Fix for platforms with unsigned chars
+- On ioctl() errors, beep will now do a printf("\a") so that, at very least, youget a beep.  :)
+
+
+1.2.1
+-----
+- fixed segfault when handling long options
+
+1.2.0
+-----
+- added -n/--new support - so beep FINALLY handles multiple beeps on a single
+ command line.
+- -f now takes decimal frequencies, not just whole numbers.
+
+1.0.2
+-----
+- Added more common -V option, as companion to -v and --version
+- README now addresses the question of multiple beeps, and composing music with
+  beep.
+
+1.0.1
+-----
+- Fixed some outdated comments in the source, and a typo in the man page.
+
+1.0.0
+-----
+- added a SIGINT handler, so Ctrl-C no longer leaves the speaker wailing 
+  forever
+- added -v/--version and -h/--help support
+- updated man page
+- this release is changed from 0.8 to 1.0.0, it's worthy of it.  Feature
+  complete and no outstanding bugs that I know of.
+
+0.6.1
+-----
+- changed man page to gzip format (instead of bzip2)
+- updated man page and README to explain ioctl problems
+
+
+0.6
+---
+- added -D option.  Both -d and -D set inter-repetition delay, but -D instructs
+  beep to delay even after the last beep, where -d delays only between beeps, 
+  and terminates immediately after last beep.
+- incorporated Rick Franchuk's idea of stdin hooks - dear god -c is annoying.
+- added a man page
+
+
+0.5
+---
+- changed over from manually parsing command line parms to getopt()
+- changed atoi() calls into sscanf() calls, to get more meaningful error 
+  handling
+
+0.4
+---
+- first useable
+- initial options supported: -f, -l, -d, -r
diff --git a/beep-1.3/COPYING b/beep-1.3/COPYING
new file mode 100644
index 0000000..60549be
--- /dev/null
+++ b/beep-1.3/COPYING
@@ -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) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/beep-1.3/CREDITS b/beep-1.3/CREDITS
new file mode 100644
index 0000000..8aaa6e3
--- /dev/null
+++ b/beep-1.3/CREDITS
@@ -0,0 +1,38 @@
+I (Johnathan Nightingale) handled the original coding, distribution, 
+maintenance, etc.
+
+Peter Tirsek (peter at tirsek dot com) filled me in on where the magical
+fairy number comes from (see beep.c).  He also tracked down the relevant
+kernel code that causes the ioctl()s to die under certain conditions
+(see the README or man page sections on ioctl).  He is truly a wonderful
+person.
+
+Andreas Hochsteger (e9625392 at student dot tuwien dot ac dot at) contributed
+several useful little patches, and was my inspiration for the -d/-D 
+distinction.  He's also thrown pointers my way about code packaging, which
+are appreciated.
+
+Rick Franchuk (rickf at transpect dot net) came up with the idea of the -s and
+-c stdin hooks.  Since most people will be using beep to tell them when a new 
+line pops up in log, or mail, or what-have-you, this was quite clever of him
+and though I really did mean to do it anyhow, he sent me the patch before I had
+bothered to write it, so he gets the credit.  :)
+
+Serge Winitzki (winitzki at erebus.phys.cwru.edu) suggested having beep take
+floats for frequency, instead of int's. 
+
+The guys at freshmeat.net really deserve a big ol whack of credit too, for
+running a very cool site in general, and for running one so successfully that
+my little 4k program generated literally hundreds of emails in reply.  It gives
+one a great sense of community to see such an overwhelming response.
+
+In particular, fryguy[at]freshmeat (Ryan Weaver) rocks supremely, for packaging
+beep in RPM format, and maintaining said package until he decides not to.  I 
+really did mean to make a spec for it myself, but hey, when freshmeat offers to
+maintain your packages, you'd have to have a *real* good reason to say no.
+
+Most of all - and I write this nearly 10 years later, so I have the benefit of
+history on my side here - I would like to thank Gerfried Fuchs, who has tirelessly
+maintained beep in debian, along with a stack of patches, years after I stopped
+hacking on it in earnest. He is amazingly dedicated, and has a new son whom we
+would all be fortunate to have follow in his father's footsteps.
diff --git a/beep-1.3/INSTALL b/beep-1.3/INSTALL
new file mode 100644
index 0000000..d2beaa5
--- /dev/null
+++ b/beep-1.3/INSTALL
@@ -0,0 +1,10 @@
+Couldn't be easier:
+
+make
+make install
+
+By default, it'll put the executable ("beep") in /usr/bin.  If you don't like 
+this, change the makefile as appropriate.
+
+This will get things off and running, but you'll probably want to check the man
+page section "IOCTL_WACKINESS" to see if you will need to fix any permissions.
\ No newline at end of file
diff --git a/beep-1.3/Makefile b/beep-1.3/Makefile
new file mode 100644
index 0000000..6cd63e6
--- /dev/null
+++ b/beep-1.3/Makefile
@@ -0,0 +1,22 @@
+CC=gcc
+FLAGS=-Wall ${CFLAGS}
+EXEC_NAME=beep
+INSTALL_PREFIX=
+BIN_DIR=${INSTALL_PREFIX}/usr/bin
+MAN_FILE=beep.1.gz
+MAN_DIR=${INSTALL_PREFIX}/usr/man/man1
+
+default : ${EXEC_NAME}
+
+clean : 
+	rm ${EXEC_NAME}
+
+${EXEC_NAME} : beep.c
+	${CC} ${FLAGS} -o ${EXEC_NAME} beep.c
+
+install :
+	-mkdir -p ${BIN_DIR}
+	cp ${EXEC_NAME} ${BIN_DIR}
+	# rm -f /usr/man/man1/beep.1.bz2
+	-mkdir -p ${MAN_DIR}
+	cp ${MAN_FILE} ${MAN_DIR}
diff --git a/beep-1.3/README b/beep-1.3/README
new file mode 100644
index 0000000..f4db57b
--- /dev/null
+++ b/beep-1.3/README
@@ -0,0 +1,112 @@
+Intro
+-----
+
+I just got so tired of being limited to printf("\a"); when I wanted a terminal
+beep.  This program isn't supposed to be anything stupendous, it's just
+supposed to get the job done.  Its intended purpose in life is to live inside
+shell/perl scripts, and allow a little more granularity than you get with the
+default terminal bell.  Maybe I'm the only one who thinks this is useful. :)
+
+If for any reason you decide you need to, contact me:
+
+johnath@johnath.com
+http://johnath.com/
+
+And beep can generally be found at:
+
+http://johnath.com/beep/
+
+For installation instructions, see INSTALL.
+For copying and (non-)warranty information, see COPYING.
+For usage information, check the man page.
+
+There is a github repository of this code at: git://github.com/johnath/beep.git
+
+A note about ioctl
+------------------
+
+As noted in the man page, some users are running into a situation where beep 
+dies with a complaint from ioctl().  The reason for this, as Peter Tirsek was
+nice enough to point out to me, stems from how the kernel handles beep's 
+attempt to poke at (for non-programmers: ioctl is a sort of catch-all function
+that lets you poke at things that have no other predefined poking-at mechanism)
+the tty, which is how it beeps.  The short story is, the kernel checks that 
+either:
+
+- you are the superuser
+- you own the current tty
+
+What this means is that root can always make beep work (to the best of my 
+knowledge!), and that any local user can make beep work, BUT a non-root remote
+user cannot use beep in it's natural state.  What's worse, an xterm, or other
+x-session counts, as far as the kernel is concerned, as 'remote', so beep 
+won't work from a non-priviledged xterm either.  I had originally chalked this
+up to a bug, but there's actually nothing I can do about it, and it really is 
+a Good Thing that the kernel does things this way.  There is also a solution.
+
+By default beep is not installed with the suid bit set, because that would 
+just be zany.  On the other hand, if you do make it suid root, all your 
+problems with beep bailing on ioctl calls will magically vanish, which is 
+pleasant, and the only reason not to is that any suid program is a potential 
+security hole.  Conveniently, beep is very short, so auditing it is pretty 
+straightforward.
+
+Decide for yourself, of course, but it looks safe to me - there's only one 
+buffer and fgets doesn't let it overflow, there's only one file opening, and 
+while there is a potential race condition there, it's with /dev/console.  If 
+someone can exploit this race by replacing /dev/console, you've got bigger 
+problems.  :)
+
+So the quick solution is beep is not beeping when you want it to is:
+
+$ su
+Password:
+# chmod 4755 /usr/bin/beep
+
+(or wherever you put it)
+
+The one snag is that this will give any little nitwit the ability to run beep 
+successfully - make sure this is what you want.  If it isn't, a slightly more 
+complex fix would be something like:
+
+# chgrp beep /usr/bin/beep
+# chmod 4750 /usr/bin/beep
+
+and then add only beep-worthy users to the 'beep' group.
+
+Playing Songs
+-------------
+
+A surprising number of people have sent in requests, or even patches, to help
+beep play multiple, different sounds off a single invocation.  I had always
+thought that if people wanted a more complex melody, they would just do 
+something like:
+
+$ cat << EOF > song.sh
+#!/bin/sh
+beep <first beep's options>
+beep <second beep's options>
+etc...
+EOF
+
+Nevertheless, because of repeated and vociferous demand, version 1.2 (and 
+presumably all later versions) include the -n/--new switch which allows you to
+use one command line to create multiple beeps.  Check the man page for 
+details.  I have also had a couple people suggest that I encourage the 
+development of such shell scripts/command lines, even collect the particularly
+melodious ones.  Certainly if anyone feels like sending some to me, I will put
+them somewhere visible, or even include them as a sample.  I think Dvorak's New
+World Symphony, 4th Movement, for example, would make a lovely shell script.
+I also wouldn't mind a rendition of BNL's If I had a million dollars.  But by
+all means, be creative.
+
+All files copyright (C) Johnathan Nightingale, 2002.
+All files distributed under the GNU general public license.
+
+
+
+
+
+
+
+
diff --git a/beep-1.3/beep.1.gz b/beep-1.3/beep.1.gz
new file mode 100644
index 0000000..800f92c
--- /dev/null
+++ b/beep-1.3/beep.1.gz
Binary files differ
diff --git a/beep-1.3/beep.c b/beep-1.3/beep.c
new file mode 100644
index 0000000..b941147
--- /dev/null
+++ b/beep-1.3/beep.c
@@ -0,0 +1,367 @@
+/*  beep - just what it sounds like, makes the console beep - but with
+ * precision control.  See the man page for details.
+ *
+ * Try beep -h for command line args
+ *
+ * This code is copyright (C) Johnathan Nightingale, 2000.
+ *
+ * This code may distributed only under the terms of the GNU Public License 
+ * which can be found at http://www.gnu.org/copyleft or in the file COPYING 
+ * supplied with this code.
+ *
+ * This code is not distributed with warranties of any kind, including implied
+ * warranties of merchantability or fitness for a particular use or ability to 
+ * breed pandas in captivity, it just can't be done.
+ *
+ * Bug me, I like it:  http://johnath.com/  or johnath@johnath.com
+ */
+
+#include <fcntl.h>
+#include <getopt.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <linux/kd.h>
+#include <linux/input.h>
+
+/* I don't know where this number comes from, I admit that freely.  A 
+   wonderful human named Raine M. Ekman used it in a program that played
+   a tune at the console, and apparently, it's how the kernel likes its
+   sound requests to be phrased.  If you see Raine, thank him for me.  
+   
+   June 28, email from Peter Tirsek (peter at tirsek dot com):
+   
+   This number represents the fixed frequency of the original PC XT's
+   timer chip (the 8254 AFAIR), which is approximately 1.193 MHz. This
+   number is divided with the desired frequency to obtain a counter value,
+   that is subsequently fed into the timer chip, tied to the PC speaker.
+   The chip decreases this counter at every tick (1.193 MHz) and when it
+   reaches zero, it toggles the state of the speaker (on/off, or in/out),
+   resets the counter to the original value, and starts over. The end
+   result of this is a tone at approximately the desired frequency. :)
+*/
+#ifndef PIT_TICK_RATE
+#define PIT_TICK_RATE 1193180
+#endif
+
+#define VERSION_STRING "beep-1.3"
+char *copyright = 
+"Copyright (C) Johnathan Nightingale, 2002.  "
+"Use and Distribution subject to GPL.  "
+"For information: http://www.gnu.org/copyleft/.";
+
+/* Meaningful Defaults */
+#define DEFAULT_FREQ       440.0 /* Middle A */
+#define DEFAULT_LENGTH     200   /* milliseconds */
+#define DEFAULT_REPS       1
+#define DEFAULT_DELAY      100   /* milliseconds */
+#define DEFAULT_END_DELAY  NO_END_DELAY
+#define DEFAULT_STDIN_BEEP NO_STDIN_BEEP
+
+/* Other Constants */
+#define NO_END_DELAY    0
+#define YES_END_DELAY   1
+
+#define NO_STDIN_BEEP   0
+#define LINE_STDIN_BEEP 1
+#define CHAR_STDIN_BEEP 2
+
+typedef struct beep_parms_t {
+  float freq;     /* tone frequency (Hz)      */
+  int length;     /* tone length    (ms)      */
+  int reps;       /* # of repetitions         */
+  int delay;      /* delay between reps  (ms) */
+  int end_delay;  /* do we delay after last rep? */
+  int stdin_beep; /* are we using stdin triggers?  We have three options:
+		     - just beep and terminate (default)
+		     - beep after a line of input
+		     - beep after a character of input
+		     In the latter two cases, pass the text back out again,
+		     so that beep can be tucked appropriately into a text-
+		     processing pipe.
+		  */
+  int verbose;    /* verbose output?          */
+  struct beep_parms_t *next;  /* in case -n/--new is used. */
+} beep_parms_t;
+
+enum { BEEP_TYPE_CONSOLE, BEEP_TYPE_EVDEV };
+
+/* Momma taught me never to use globals, but we need something the signal 
+   handlers can get at.*/
+int console_fd = -1;
+int console_type = BEEP_TYPE_CONSOLE;
+char *console_device = NULL;
+
+
+void do_beep(int freq) {
+  if (console_type == BEEP_TYPE_CONSOLE) {
+    if(ioctl(console_fd, KIOCSOUND, freq != 0
+      ? (int)(PIT_TICK_RATE/freq)
+      : freq) < 0) {
+      printf("\a");  /* Output the only beep we can, in an effort to fall back on usefulness */
+      perror("ioctl");
+    }
+  } else {
+     /* BEEP_TYPE_EVDEV */
+     struct input_event e;
+
+     e.type = EV_SND;
+     e.code = SND_TONE;
+     e.value = freq;
+
+     write(console_fd, &e, sizeof(struct input_event));
+  }
+}
+
+
+/* If we get interrupted, it would be nice to not leave the speaker beeping in
+   perpetuity. */
+void handle_signal(int signum) {
+
+  if(console_device)
+    free(console_device);
+
+  switch(signum) {
+  case SIGINT:
+    if(console_fd >= 0) {
+      /* Kill the sound, quit gracefully */
+      do_beep(0);
+      close(console_fd);
+      exit(signum);
+    } else {
+      /* Just quit gracefully */
+      exit(signum);
+    }
+  }
+}
+
+/* print usage and exit */
+void usage_bail(const char *executable_name) {
+  printf("Usage:\n%s [-f freq] [-l length] [-r reps] [-d delay] "
+	 "[-D delay] [-s] [-c] [--verbose | --debug] [-e device]\n",
+	 executable_name);
+  printf("%s [Options...] [-n] [--new] [Options...] ... \n", executable_name);
+  printf("%s [-h] [--help]\n", executable_name);
+  printf("%s [-v] [-V] [--version]\n", executable_name);
+  exit(1);
+}
+
+
+/* Parse the command line.  argv should be untampered, as passed to main.
+ * Beep parameters returned in result, subsequent parameters in argv will over-
+ * ride previous ones.
+ * 
+ * Currently valid parameters:
+ *  "-f <frequency in Hz>"
+ *  "-l <tone length in ms>"
+ *  "-r <repetitions>"
+ *  "-d <delay in ms>"
+ *  "-D <delay in ms>" (similar to -d, but delay after last repetition as well)
+ *  "-s" (beep after each line of input from stdin, echo line to stdout)
+ *  "-c" (beep after each char of input from stdin, echo char to stdout)
+ *  "--verbose/--debug"
+ *  "-h/--help"
+ *  "-v/-V/--version"
+ *  "-n/--new"
+ *
+ * March 29, 2002 - Daniel Eisenbud points out that c should be int, not char,
+ * for correctness on platforms with unsigned chars.
+ */
+void parse_command_line(int argc, char **argv, beep_parms_t *result) {
+  int c;
+
+  struct option opt_list[7] = {{"help", 0, NULL, 'h'},
+			       {"version", 0, NULL, 'V'},
+			       {"new", 0, NULL, 'n'},
+			       {"verbose", 0, NULL, 'X'},
+			       {"debug", 0, NULL, 'X'},
+			       {"device", 1, NULL, 'e'},
+			       {0,0,0,0}};
+  while((c = getopt_long(argc, argv, "f:l:r:d:D:schvVne:", opt_list, NULL))
+	!= EOF) {
+    int argval = -1;    /* handle parsed numbers for various arguments */
+    float argfreq = -1; 
+    switch(c) {      
+    case 'f':  /* freq */
+      if(!sscanf(optarg, "%f", &argfreq) || (argfreq >= 20000 /* ack! */) || 
+	 (argfreq <= 0))
+	usage_bail(argv[0]);
+      else
+	if (result->freq != 0)
+	  fprintf(stderr, "WARNING: multiple -f values given, only last "
+	    "one is used.\n");
+	result->freq = argfreq;    
+      break;
+    case 'l' : /* length */
+      if(!sscanf(optarg, "%d", &argval) || (argval < 0))
+	usage_bail(argv[0]);
+      else
+	result->length = argval;
+      break;
+    case 'r' : /* repetitions */
+      if(!sscanf(optarg, "%d", &argval) || (argval < 0))
+	usage_bail(argv[0]);
+      else
+	result->reps = argval;
+      break;
+    case 'd' : /* delay between reps - WITHOUT delay after last beep*/
+      if(!sscanf(optarg, "%d", &argval) || (argval < 0))
+	usage_bail(argv[0]);
+      else {
+	result->delay = argval;
+	result->end_delay = NO_END_DELAY;
+      }
+      break;
+    case 'D' : /* delay between reps - WITH delay after last beep */
+      if(!sscanf(optarg, "%d", &argval) || (argval < 0))
+	usage_bail(argv[0]);
+      else {
+	result->delay = argval;
+	result->end_delay = YES_END_DELAY;
+      }
+      break;
+    case 's' :
+      result->stdin_beep = LINE_STDIN_BEEP;
+      break;
+    case 'c' :
+      result->stdin_beep = CHAR_STDIN_BEEP;
+      break;
+    case 'v' :
+    case 'V' : /* also --version */
+      printf("%s\n",VERSION_STRING);
+      exit(0);
+      break;
+    case 'n' : /* also --new - create another beep */
+      if (result->freq == 0)
+	result->freq = DEFAULT_FREQ;
+      result->next = (beep_parms_t *)malloc(sizeof(beep_parms_t));
+      result->next->freq       = 0;
+      result->next->length     = DEFAULT_LENGTH;
+      result->next->reps       = DEFAULT_REPS;
+      result->next->delay      = DEFAULT_DELAY;
+      result->next->end_delay  = DEFAULT_END_DELAY;
+      result->next->stdin_beep = DEFAULT_STDIN_BEEP;
+      result->next->verbose    = result->verbose;
+      result->next->next       = NULL;
+      result = result->next; /* yes, I meant to do that. */
+      break;
+    case 'X' : /* --debug / --verbose */
+      result->verbose = 1;
+      break;
+    case 'e' : /* also --device */
+      console_device = strdup(optarg);
+      break;
+    case 'h' : /* notice that this is also --help */
+    default :
+      usage_bail(argv[0]);
+    }
+  }
+  if (result->freq == 0)
+    result->freq = DEFAULT_FREQ;
+}  
+
+void play_beep(beep_parms_t parms) {
+  int i; /* loop counter */
+
+  if(parms.verbose == 1)
+      fprintf(stderr, "[DEBUG] %d times %d ms beeps (%d delay between, "
+	"%d delay after) @ %.2f Hz\n",
+	parms.reps, parms.length, parms.delay, parms.end_delay, parms.freq);
+
+  /* try to snag the console */
+  if(console_device)
+    console_fd = open(console_device, O_WRONLY);
+  else
+    if((console_fd = open("/dev/tty0", O_WRONLY)) == -1)
+      console_fd = open("/dev/vc/0", O_WRONLY);
+
+  if(console_fd == -1) {
+    fprintf(stderr, "Could not open %s for writing\n",
+      console_device != NULL ? console_device : "/dev/tty0 or /dev/vc/0");
+    printf("\a");  /* Output the only beep we can, in an effort to fall back on usefulness */
+    perror("open");
+    exit(1);
+  }
+
+  if (ioctl(console_fd, EVIOCGSND(0)) != -1)
+    console_type = BEEP_TYPE_EVDEV;
+  else
+    console_type = BEEP_TYPE_CONSOLE;
+  
+  /* Beep */
+  for (i = 0; i < parms.reps; i++) {                    /* start beep */
+    do_beep(parms.freq);
+    /* Look ma, I'm not ansi C compatible! */
+    usleep(1000*parms.length);                          /* wait...    */
+    do_beep(0);                                         /* stop beep  */
+    if(parms.end_delay || (i+1 < parms.reps))
+       usleep(1000*parms.delay);                        /* wait...    */
+  }                                                     /* repeat.    */
+
+  close(console_fd);
+}
+
+
+
+int main(int argc, char **argv) {
+  char sin[4096], *ptr;
+  
+  beep_parms_t *parms = (beep_parms_t *)malloc(sizeof(beep_parms_t));
+  parms->freq       = 0;
+  parms->length     = DEFAULT_LENGTH;
+  parms->reps       = DEFAULT_REPS;
+  parms->delay      = DEFAULT_DELAY;
+  parms->end_delay  = DEFAULT_END_DELAY;
+  parms->stdin_beep = DEFAULT_STDIN_BEEP;
+  parms->verbose    = 0;
+  parms->next       = NULL;
+
+  signal(SIGINT, handle_signal);
+  parse_command_line(argc, argv, parms);
+
+  /* this outermost while loop handles the possibility that -n/--new has been
+     used, i.e. that we have multiple beeps specified. Each iteration will
+     play, then free() one parms instance. */
+  while(parms) {
+    beep_parms_t *next = parms->next;
+
+    if(parms->stdin_beep) {
+      /* in this case, beep is probably part of a pipe, in which case POSIX 
+	 says stdin and out should be fuly buffered.  This however means very 
+	 laggy performance with beep just twiddling it's thumbs until a buffer
+	 fills. Thus, kill the buffering.  In some situations, this too won't 
+	 be enough, namely if we're in the middle of a long pipe, and the 
+	 processes feeding us stdin are buffered, we'll have to wait for them,
+	 not much to  be done about that. */
+      setvbuf(stdin, NULL, _IONBF, 0);
+      setvbuf(stdout, NULL, _IONBF, 0);
+      while(fgets(sin, 4096, stdin)) {
+	if(parms->stdin_beep==CHAR_STDIN_BEEP) {
+	  for(ptr=sin;*ptr;ptr++) {
+	    putchar(*ptr);
+	    fflush(stdout);
+	    play_beep(*parms);
+	  }
+	} else {
+	  fputs(sin, stdout);
+	  play_beep(*parms);
+	}
+      }
+    } else {
+      play_beep(*parms);
+    }
+
+    /* Junk each parms struct after playing it */
+    free(parms);
+    parms = next;
+  }
+
+  if(console_device)
+    free(console_device);
+
+  return EXIT_SUCCESS;
+}
diff --git a/beep.patches/beep-50.description b/beep.patches/beep-50.description
new file mode 100644
index 0000000..74c828f
--- /dev/null
+++ b/beep.patches/beep-50.description
@@ -0,0 +1 @@
+This patch allows beep to be compiled against a different set of Linux headers outside of the normal tool chain by supporting CFLAGS and also allows beep to be installed in a non-root location.
diff --git a/beep.patches/beep-50.patch b/beep.patches/beep-50.patch
new file mode 100644
index 0000000..229bbb6
--- /dev/null
+++ b/beep.patches/beep-50.patch
@@ -0,0 +1,33 @@
+diff -aruN a/Makefile b/Makefile
+--- a/Makefile	2010-08-03 06:57:27.000000000 -0700
++++ b/Makefile	2010-11-04 08:16:03.930197265 -0700
+@@ -1,19 +1,22 @@
+ CC=gcc
+-FLAGS=-Wall
++FLAGS=-Wall ${CFLAGS}
+ EXEC_NAME=beep
+-INSTALL_DIR=/usr/bin
++INSTALL_PREFIX=
++BIN_DIR=${INSTALL_PREFIX}/usr/bin
+ MAN_FILE=beep.1.gz
+-MAN_DIR=/usr/man/man1
++MAN_DIR=${INSTALL_PREFIX}/usr/man/man1
+ 
+-default : beep
++default : ${EXEC_NAME}
+ 
+ clean : 
+ 	rm ${EXEC_NAME}
+ 
+-beep : beep.c
++${EXEC_NAME} : beep.c
+ 	${CC} ${FLAGS} -o ${EXEC_NAME} beep.c
+ 
+-install : 
+-	cp ${EXEC_NAME} ${INSTALL_DIR}
++install :
++	-mkdir -p ${BIN_DIR}
++	cp ${EXEC_NAME} ${BIN_DIR}
+ 	# rm -f /usr/man/man1/beep.1.bz2
++	-mkdir -p ${MAN_DIR}
+ 	cp ${MAN_FILE} ${MAN_DIR}
diff --git a/beep.patches/beep-51.description b/beep.patches/beep-51.description
new file mode 100644
index 0000000..ce84b8f
--- /dev/null
+++ b/beep.patches/beep-51.description
@@ -0,0 +1,6 @@
+This patch replaces CLOCK_TICK_RATE with PIT_TICK_RATE, in name only. 
+The use of PIT_TICK_RATE is historic with the KIOCSOUND and KDMKTONE 
+ioctls; howwever, it used to be the platform-dependent CLOCK_TICK_RATE 
+between kernel version 2.6.12 and 2.6.36, which was a minor but 
+unfortunate ABI change that ended up polluting, at least in name, beep 
+as well.
diff --git a/beep.patches/beep-51.patch b/beep.patches/beep-51.patch
new file mode 100644
index 0000000..d7731d8
--- /dev/null
+++ b/beep.patches/beep-51.patch
@@ -0,0 +1,23 @@
+diff -aruN a/beep.c b/beep.c
+--- a/beep.c	2010-08-03 06:57:27.000000000 -0700
++++ b/beep.c	2010-11-09 17:17:01.000000000 -0800
+@@ -44,8 +44,8 @@
+    resets the counter to the original value, and starts over. The end
+    result of this is a tone at approximately the desired frequency. :)
+ */
+-#ifndef CLOCK_TICK_RATE
+-#define CLOCK_TICK_RATE 1193180
++#ifndef PIT_TICK_RATE
++#define PIT_TICK_RATE 1193180
+ #endif
+ 
+ #define VERSION_STRING "beep-1.3"
+@@ -100,7 +100,7 @@
+ void do_beep(int freq) {
+   if (console_type == BEEP_TYPE_CONSOLE) {
+     if(ioctl(console_fd, KIOCSOUND, freq != 0
+-      ? (int)(CLOCK_TICK_RATE/freq)
++      ? (int)(PIT_TICK_RATE/freq)
+       : freq) < 0) {
+       printf("\a");  /* Output the only beep we can, in an effort to fall back on usefulness */
+       perror("ioctl");
diff --git a/beep.tar.gz b/beep.tar.gz
new file mode 100644
index 0000000..30a7e2c
--- /dev/null
+++ b/beep.tar.gz
Binary files differ
diff --git a/beep.url b/beep.url
new file mode 100644
index 0000000..9f1b697
--- /dev/null
+++ b/beep.url
@@ -0,0 +1 @@
+http://johnath.com/beep/beep-1.3.tar.gz
diff --git a/beep.version b/beep.version
new file mode 100644
index 0000000..7e32cd5
--- /dev/null
+++ b/beep.version
@@ -0,0 +1 @@
+1.3
