Ajout hv-utilities et conversion à autoconf
authorHugo Villeneuve <hugo@hugovil.com>
Wed, 5 Jun 2013 01:16:10 +0000 (21:16 -0400)
committerHugo Villeneuve <hugo@hugovil.com>
Wed, 5 Jun 2013 03:26:29 +0000 (23:26 -0400)
46 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
config/.gitignore [new file with mode: 0644]
configure.ac [new file with mode: 0644]
data/Makefile.am [new file with mode: 0644]
data/backup.conf [new file with mode: 0755]
scripts/Makefile.am [new file with mode: 0644]
scripts/camera-download [new file with mode: 0755]
scripts/cd-copy [new file with mode: 0755]
scripts/cd-erase [new file with mode: 0755]
scripts/cgrep [new file with mode: 0755]
scripts/crypt.pl [new file with mode: 0755]
scripts/distro-backup [new file with mode: 0755]
scripts/dos2unix [new file with mode: 0755]
scripts/fix-avi [new file with mode: 0755]
scripts/flac2mp3 [new file with mode: 0755]
scripts/flac2ogg [new file with mode: 0755]
scripts/gztobz2 [new file with mode: 0755]
scripts/hv-backup [new file with mode: 0755]
scripts/hv-scan [new file with mode: 0755]
scripts/hv-video-dvd [new file with mode: 0755]
scripts/mail-files [new file with mode: 0755]
scripts/mail-if-fail [new file with mode: 0755]
scripts/mail-statistics [new file with mode: 0755]
scripts/media-write [new file with mode: 0755]
scripts/pstopdf [new file with mode: 0755]
scripts/replace.pl [new file with mode: 0755]
scripts/rotatelogs [new file with mode: 0755]
scripts/setdate [new file with mode: 0755]
scripts/strip-debug-symbols [new file with mode: 0755]
scripts/tape-backup [new file with mode: 0755]
scripts/tape-backup-mult [new file with mode: 0755]
scripts/tape-list [new file with mode: 0755]
scripts/tape-restore [new file with mode: 0755]
scripts/tarbz2 [new file with mode: 0755]
scripts/tildes-clean [new file with mode: 0755]
scripts/vd [new file with mode: 0755]
scripts/vl [new file with mode: 0755]
scripts/vs [new file with mode: 0755]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..4295f32
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Author: Hugo Villeneuve (hugo@hugovil.com)
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
+++ b/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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           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.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..09e39ed
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,2 @@
+2013-06-04  Hugo Villeneuve  <hugo@hugovil.com>
+       * First version
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..a1e89e1
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation,
+Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..6709674
--- /dev/null
@@ -0,0 +1,20 @@
+## Makefile.am -- Process this file with automake to produce Makefile.in
+
+AUTOMAKE_OPTIONS = gnu
+
+SUBDIRS = scripts data
+
+## we want these in the dist tarball
+EXTRA_DIST = autogen.sh
+
+ACLOCAL = aclocal -I $(ac_aux_dir)
+
+CLEANFILES = *~
+
+DISTCLEANFILES = .deps/*.P
+
+MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config-h.in \
+                       stamp-h.in $(ac_aux_dir)/depcomp \
+                       $(ac_aux_dir)/install-sh $(ac_aux_dir)/missing \
+                       $(ac_aux_dir)/mkinstalldirs $(ac_aux_dir)/config.guess \
+                       $(ac_aux_dir)/config.sub $(ac_aux_dir)/ltmain.sh
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..bed28c1
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,3 @@
+
+2-13-06-04: hv-utilities-0.1.0 has been released.
+       This is the initial release.
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..1386306
--- /dev/null
+++ b/README
@@ -0,0 +1,16 @@
+                  hv-utilities
+
+A collection of vrious shell scripts
+
+Project website:
+       http://www.hugovil.com/en/hv-utilities
+
+For recent project news, see the NEWS file.
+
+
+Building hv-utilities:
+----------------------
+
+For generic installation instructions, see the "INSTALL" file.
+
+If you are building from the git repository, first run the "autogen.sh" script.
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..d432611
--- /dev/null
+++ b/TODO
@@ -0,0 +1,6 @@
+TODO
+====
+
+-Ajout répertoire conf
+-Ajout optionel scripts tape
+
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..7d91719
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+# autogen.sh -- Use this script to create generated files from the git distribution
+
+autoreconf -vfi
diff --git a/config/.gitignore b/config/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..28c98f8
--- /dev/null
@@ -0,0 +1,14 @@
+# configure.ac -- Process this file with autoconf to produce configure.
+
+dnl Initialization stuff.
+AC_INIT(hv-utilities, 0.1.0)
+AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_SRCDIR(scripts/vs)
+dnl Checking if the NEWS file has been updated to reflect the current version.
+AM_INIT_AUTOMAKE(check-news)
+AM_SILENT_RULES([yes])
+
+AC_SUBST(ac_aux_dir)
+
+dnl Creating output file(s)
+AC_OUTPUT(Makefile scripts/Makefile data/Makefile)
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644 (file)
index 0000000..8d76a5c
--- /dev/null
@@ -0,0 +1,14 @@
+# This file is processed by GNU automake to generate Makefile.in
+
+# Install configuration files in $(sysconfdir) and distribute them.
+dist_sysconf_DATA = \
+    backup.conf
+
+# we want these in the dist tarball
+EXTRA_DIST =
+
+CLEANFILES = *~
+
+DISTCLEANFILES = .deps/*.P
+
+MAINTAINERCLEANFILES = Makefile.in
diff --git a/data/backup.conf b/data/backup.conf
new file mode 100755 (executable)
index 0000000..6fab501
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+# List of files/directories to backup
+BKP_FILES_LIST="/etc /root /srv /usr/local/bin"
+
+# Where to put backup
+BKP_DEST_DIR="/mnt/nas/backup"
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
new file mode 100644 (file)
index 0000000..476da1f
--- /dev/null
@@ -0,0 +1,33 @@
+# This file is processed by GNU automake to generate Makefile.in
+
+# Install scripts in $(bindir) and distribute them.
+dist_bin_SCRIPTS = \
+    camera-download \
+    cd-erase cd-copy media-write \
+    cgrep \
+    pstopdf \
+    distro-backup \
+    dos2unix \
+    fix-avi \
+    gztobz2 tarbz2 \
+    hv-backup \
+    hv-video-dvd \
+    mail-files mail-if-fail mail-statistics \
+    replace.pl \
+    rotatelogs \
+    setdate \
+    strip-debug-symbols \
+    tildes-clean \
+    vd vs vl \
+    flac2ogg flac2mp3 \
+    hv-scan \
+    tape-backup tape-backup-mult tape-list tape-restore
+
+# we want these in the dist tarball
+EXTRA_DIST =
+
+CLEANFILES = *~
+
+DISTCLEANFILES = .deps/*.P
+
+MAINTAINERCLEANFILES = Makefile.in
diff --git a/scripts/camera-download b/scripts/camera-download
new file mode 100755 (executable)
index 0000000..5734b67
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+PROG_NAME=$(basename $0)
+
+MOUNTPOINT=/media/camera
+DIRNAME=$(date +%Y%m%d-%Hh%M)
+
+print_usage()
+{
+    echo "Usage: ${PROG_NAME} [OPTION]..."
+    echo
+    echo "Copy and delte images from digital camera."
+    echo
+    echo "Options:"
+    echo "  -h   display this help and exit"
+    exit 0
+}
+
+while getopts "h" flag ;do
+    case ${flag} in
+       h)
+           print_usage
+           ;;
+       ?)
+           echo "${PROG_NAME}: Invalid option: ${OPTARG}."
+           echo "Try \`${PROG_NAME} -h' for more information."
+           exit 1
+           ;;
+    esac
+done
+shift `expr "${OPTIND}" - 1`
+
+# `$#' now represents the number of arguments after the options.
+# `$1' is the first argument, etc.
+if [ $# -ne 0 ]; then
+    echo "${PROG_NAME}: Too many arguments."
+    echo "Try \`${PROG_NAME} -h' for more information."
+    exit 1
+fi
+
+
+if ! mount | grep -q ${MOUNTPOINT}; then
+    mount ${MOUNTPOINT} || exit 1
+fi
+
+mkdir -p ~/camera/${DIRNAME} &&
+
+mv ${MOUNTPOINT}/dcim/???_???? ~/camera/${DIRNAME}
+
+umount /media/camera
+
+exit $?
diff --git a/scripts/cd-copy b/scripts/cd-copy
new file mode 100755 (executable)
index 0000000..166698e
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# cd-copy: CD to CD copy
+
+# Load configuration informations about device
+. /etc/sysconfig/cdrecord
+
+print_usage()
+{
+    echo "Usage: $(basename $0)"
+}
+
+if [ $# != 0 ]; then
+    print_usage
+    exit 1
+fi
+
+if [ "x${CDROM_DEVICE}" != "x${CDREC_DEVICE}" ];then
+    CDRDAO_OPTS="--on-the-fly"
+fi
+
+cdrdao copy ${CDRDAO_OPTS} \
+    --source-device ${CDROM_DEVICE} \
+    --device ${CDREC_DEVICE} ${CDRECORD_OPTS} --eject
+
+exit $?
diff --git a/scripts/cd-erase b/scripts/cd-erase
new file mode 100755 (executable)
index 0000000..74930c2
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+# cd-erase
+
+# Load configuration informations about device
+. /etc/sysconfig/cdrecord
+
+print_usage()
+{
+    echo "Usage: $(basename $0) {all|fast|session}"
+}
+
+if [ $# = 0 -o $# -gt 1 ]; then
+    print_usage
+    exit 1
+fi
+
+ERASE_TYPE=${1}
+
+case "${ERASE_TYPE}" in
+    all)
+       ;;
+    
+    fast)
+       ;;
+    
+    session)
+       ;;
+    
+    *)
+       print_usage
+       exit 1
+       ;;
+esac
+
+cdrecord ${CDRECORD_OPTS} dev=${CDREC_DEVICE} blank=${ERASE_TYPE}
+
+exit $?
diff --git a/scripts/cgrep b/scripts/cgrep
new file mode 100755 (executable)
index 0000000..84be2f1
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+print_usage()
+{
+    echo "$(basename $0) -- Grep and Less front end."
+    echo "Usage: $(basename $0) GREP_STRING"
+}
+
+if [ $# -ne 1 ]; then
+    print_usage
+    exit 1
+fi
+
+GREP_STRING=${1}
+
+grep --color=always -rn "${GREP_STRING}" * | less -RFX
diff --git a/scripts/crypt.pl b/scripts/crypt.pl
new file mode 100755 (executable)
index 0000000..0b67a68
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/perl
+
+# Taken from http://rasterweb.net/raster/code/crypt.html
+#
+# I needed this for creating shadow passwords under Red Hat Linux 6.1, since
+# passwords are not stored in plain text (that's a good idea) if I remember
+# correctly, Red Hat had broken useradd, or adduser, or whatever the hell they
+# were using at the time...
+
+srand (time());
+my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
+my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
+my $plaintext = shift;
+my $crypttext = crypt ($plaintext, $salt);
+
+print "${crypttext}\n";
diff --git a/scripts/distro-backup b/scripts/distro-backup
new file mode 100755 (executable)
index 0000000..006ab2b
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# linux HV backup
+
+export MEDIA_DEV="/dev/dvd"
+export MEDIA_DIR="/media/dvd"
+
+export BKP_TMP_DIR=/mnt/video/tmp
+BKP_FILES_LIST="/bin /boot /dev /etc /home /lib /opt /root /sbin /var /usr"
+
+media-write ${BKP_FILES_LIST}
+
+exit $?
diff --git a/scripts/dos2unix b/scripts/dos2unix
new file mode 100755 (executable)
index 0000000..aca541a
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+print_usage()
+{
+    echo "$(basename $0) -- Translates multiple DOS text file to UNIX."
+    echo "Usage: $(basename $0) dos-text-file"
+}
+
+if [ $# = 0 ]; then
+    print_usage
+    exit 1
+fi
+
+TMPFILE="/tmp/dos2unix$$"
+
+while [ $# -ne 0 ]; do
+    # Checking if input file exist.
+    if [ ! -f $1 ]; then
+       echo "$0: File $1 not found."
+       print_usage
+       exit 1
+    fi
+    # DOS files lines ends with CR+LF. Unix files lines ends with LF.
+    # Removing CR from DOS file (CR is 0x0D --> 015 in octal notation).
+    tr -d '\015' < $1 > $TMPFILE
+    if [ $? -eq 0 ] ; then
+       # Success
+        mv $TMPFILE $1
+    fi
+    shift
+done
+
+if [ -f $TMPFILE ]; then
+    rm $TMPFILE
+fi
diff --git a/scripts/fix-avi b/scripts/fix-avi
new file mode 100755 (executable)
index 0000000..0462a62
--- /dev/null
@@ -0,0 +1,149 @@
+#!/bin/bash
+#
+# A script to correct the resolution of an AVI file and
+# make a DVD without any stretching or squashing
+#
+
+# NTSC values
+dvd_width=720
+dvd_height=480
+
+# Precision of computations
+BC_SCALE=10
+
+print_usage()
+{
+    echo "Usage: ${PROG_NAME} [OPTION]...  WIDTHxHEIGHT"
+    echo
+    echo "Outputs ffmpeg options to correctly convert an AVI file,"
+    echo "of width WIDTH and height HEIGHT, for creating a"
+    echo "video DVD."
+    echo
+    echo "Options:"
+    echo "  -h     display this help and exit"
+    echo "  -w     output in widescreen format (preferred)"
+    echo "  -v     verbose output"
+    echo
+    echo "When encoding to a 16:9 aspect MPEG (*see note below*)"
+    echo "
+Source   NTSC/PAL               NTSC/PAL               NTSC/PAL
+Aspect   CVD                    SVCD                   DVD
+ 4:3     Not Applicable: See above table for 1.33 resolutions
+
+16:9     *352x480 / *352x576    *480x480 / *480x576    352x480 / 352x576 704x480 / 704x576 720x480 / 720x576
+
+1.85     *352x460 / *352x552    *480x460 / *480x552    352x460 / 352x552 704x460 / 704x552 720x460 / 720x552
+
+2.20     *352x388 / *352x432    *480x388 / *480x464    352x388 / 352x464 704x388 / 704x464 720x388 / 720x464
+
+2.35     *352x360 / *352x432    *480x360 / *480x432    352x360 / 352x432 704x360 / 704x432 720x360 / 720x432"
+}
+
+#dvd_dar this is either 16:9 or 4:3 the Display Aspect Ratio
+dvd_dar=`echo "scale=${BC_SCALE}; 4/3" | bc`
+DISPLAY_DAR="4:3"
+
+while getopts "hwv" flag ;do
+    case ${flag} in
+       h)
+           print_usage
+            exit 0
+           ;;
+       w)
+            # Widescreen, 16:9
+            dvd_dar=`echo "scale=${BC_SCALE}; 16/9" | bc`
+            DISPLAY_DAR="16:9"
+            widescreen=yes
+           ;;
+       v)
+           VERBOSE=yes
+           ;;
+       ?)
+           echo "${PROG_NAME}: Invalid option: ${OPTARG}."
+           echo "Try \`${PROG_NAME} --help' for more information."
+           exit 1
+           ;;
+    esac
+done
+shift `expr "${OPTIND}" - 1`
+
+# `$#' now represents the number of arguments after the options.
+# `$1' is the first argument, etc.
+if [ $# -ne 1 ]; then
+    print_usage
+    exit 1
+fi
+
+
+calc_par()
+{
+    width=$1
+    height=$2
+    dar=$3
+
+    echo "scale=${BC_SCALE}; ($height*$dar)/$width" | bc
+}
+
+src_width=$(echo $1 | sed "s!\([0-9]*\)x[0-9]*!\1!")
+src_height=$(echo $1 | sed "s![0-9]*x\([0-9]*\)!\1!")
+
+src_dar=`echo "scale=${BC_SCALE}; $src_width/$src_height" | bc`
+src_par=$(calc_par $src_width $src_height $src_dar)
+
+dvd_par=$(calc_par $dvd_width $dvd_height $dvd_dar)
+
+# when width of DVD is going to be 720, height will be:
+out_height=`echo "scale=0; ($dvd_par*$dvd_width)/$src_dar" | bc`
+
+# Temporaire:
+if [ ${out_height} -gt 480 -a ${out_height} -lt 485 ]; then
+    out_height=${dvd_height}
+fi
+
+h22=`echo "scale=0; ($out_height/2)*2" | bc`
+
+# ...and working out height is even, if not add 1 to make it even
+if [ $out_height != $h22 ]; then
+    out_height=`expr $out_height + 1`
+fi
+
+#Padding needed
+#And test if even pixels
+
+p=`echo "scale=0; ($dvd_height-$out_height)/2" | bc`
+p22=`echo "scale=0; ($p/2)*2" | bc`
+
+# Padding values must be even.
+if [ $p != $p22 ]; then
+    p_top=`expr $p - 1`
+    p_bot=`expr $p + 1`
+else
+    p_bot=$p
+    p_top=$p
+fi
+
+if [ "x${VERBOSE}" = "xyes" ]; then
+    out_par=$(calc_par $dvd_width $out_height $dvd_dar)
+    echo "Source:"
+    echo "  Size................: ${src_width}x${src_height}"
+    echo "  Display Aspect Ratio: ${src_dar}"
+    echo "  Pixel Aspect Ratio..: ${src_par}"
+    echo
+    echo "DVD:"
+    echo "  Size................: ${dvd_width}x${dvd_height}"
+    echo "  Display Aspect Ratio: ${dvd_dar}"
+    echo "  Pixel Aspect Ratio..: ${dvd_par}"
+    echo
+    echo "Output:"
+    echo "  Size................: ${dvd_width}x${out_height}"
+    echo "  Display Aspect Ratio: ${dvd_dar}"
+    echo "  Pixel Aspect Ratio..: ${out_par}"
+    echo "  Padding Top.........: ${p_top}"
+    echo "  Padding Bottom......: ${p_bot}"
+    echo
+    echo "ffmpeg options:"
+fi
+
+echo " -s ${dvd_width}x${out_height} -padtop ${p_top} -padbottom ${p_bot} -aspect ${DISPLAY_DAR}"
+
+exit $?
diff --git a/scripts/flac2mp3 b/scripts/flac2mp3
new file mode 100755 (executable)
index 0000000..5846f73
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# default = 4
+# 0 = highest quality.
+VBR_QUALITY="-V0"
+LAME_OPTS="--noreplaygain ${VBR_QUALITY} --add-id3v2 --pad-id3v2 \
+  --ignore-tag-errors"
+METAFLAC="metaflac"
+
+print_usage()
+{
+    echo "$(basename $0) -- Translates FLAC file to MP3."
+    echo "Usage: $(basename $0) flac-file"
+}
+
+if [ $# = 0 ]; then
+    print_usage
+    exit 1
+fi
+
+a=${1}
+
+# Checking if input file exist.
+if [ ! -f $1 ]; then
+    echo "$0: File $a not found."
+    print_usage
+    exit 1
+fi
+
+OUTF=`echo "$a" | sed s/\.flac$/.mp3/g`
+
+ARTIST=`${METAFLAC} "$a" --show-tag=ARTIST | sed s/.*=//g`
+TITLE=`${METAFLAC} "$a" --show-tag=TITLE | sed s/.*=//g`
+ALBUM=`${METAFLAC} "$a" --show-tag=ALBUM | sed s/.*=//g`
+GENRE=`${METAFLAC} "$a" --show-tag=GENRE | sed s/.*=//g`
+TRACKNUMBER=`${METAFLAC} "$a" --show-tag=TRACKNUMBER | sed s/.*=//g`
+DATE=`${METAFLAC} "$a" --show-tag=DATE | sed s/.*=//g`
+
+flac -c -d "$a" | lame ${LAME_OPTS} \
+    --tt "$TITLE" \
+    --tn "${TRACKNUMBER:-0}" \
+    --ta "$ARTIST" \
+    --tl "$ALBUM" \
+    --ty "$DATE" \
+    --tg "${GENRE:-12}" \
+    - "$OUTF"
diff --git a/scripts/flac2ogg b/scripts/flac2ogg
new file mode 100755 (executable)
index 0000000..08495d9
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+# default = 3.
+OGG_QUALITY="4"
+OGGENC_OPTS="-q ${OGG_QUALITY}"
+METAFLAC="metaflac"
+
+print_usage()
+{
+    echo "$(basename $0) -- Translates FLAC file to OGG."
+    echo "Usage: $(basename $0) flac-file"
+}
+
+if [ $# = 0 ]; then
+    print_usage
+    exit 1
+fi
+
+a=${1}
+
+# Checking if input file exist.
+if [ ! -f $1 ]; then
+    echo "$0: File $a not found."
+    print_usage
+    exit 1
+fi
+
+OUTF=`echo "$a" | sed s/\.flac$/.ogg/g`
+
+ARTIST=`${METAFLAC} "$a" --show-tag=ARTIST | sed s/.*=//g`
+TITLE=`${METAFLAC} "$a" --show-tag=TITLE | sed s/.*=//g`
+ALBUM=`${METAFLAC} "$a" --show-tag=ALBUM | sed s/.*=//g`
+GENRE=`${METAFLAC} "$a" --show-tag=GENRE | sed s/.*=//g`
+TRACKNUMBER=`${METAFLAC} "$a" --show-tag=TRACKNUMBER | sed s/.*=//g`
+DATE=`${METAFLAC} "$a" --show-tag=DATE | sed s/.*=//g`
+
+flac -c -d "$a" | oggenc ${OGGENC_OPTS} \
+    -t "$TITLE" \
+    -N "${TRACKNUMBER:-0}" \
+    -a "$ARTIST" \
+    -l "$ALBUM" \
+    -d "$DATE" \
+    -G "${GENRE:-12}" \
+    -o "$OUTF" -
diff --git a/scripts/gztobz2 b/scripts/gztobz2
new file mode 100755 (executable)
index 0000000..5bb9918
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+print_usage()
+{
+    echo "$(basename $0) -- Convert multiple compressed gzip files to bzip2."
+    echo "Usage: $(basename $0) [FILES]"
+}
+
+if [ $# = 0 ]; then
+    print_usage
+    exit 1
+fi
+
+while [ $# -ne 0 ]; do
+    ORIG_GZIPPED_FILENAME=${1}
+
+    # Checking if input file exist.
+    if [ ! -f $1 ]; then
+       echo "$0: File ${ORIG_GZIPPED_FILENAME} not found."
+       exit 1
+    fi
+
+    # Checking if input file is a valid gzipped file.
+    gzip -t ${ORIG_GZIPPED_FILENAME}
+    if [ $? -ne 0 ] ; then
+       echo "$0: File ${ORIG_GZIPPED_FILENAME} is not a valid gzip file."
+       exit 1
+    fi
+
+    # Obtaining uncompressed name of file
+    FILENAME=$(gunzip -l ${ORIG_GZIPPED_FILENAME} | sed '1d' | sed 's/\(.*\)% \(.*\)/\2/')
+    
+    # Decompressing file to standard output and piping result to bzip2
+    gunzip ${ORIG_GZIPPED_FILENAME} --stdout | bzip2 --best > ${FILENAME}.bz2
+    if [ $? -ne 0 ] ; then
+       echo "$0: Error converting file ${ORIG_GZIPPED_FILENAME} to bzip2."
+       exit 1
+    fi
+
+    # Keeping the original file's timestamp
+    touch --reference=${ORIG_GZIPPED_FILENAME} ${FILENAME}.bz2
+
+    # Deleting original .gz file
+    if [ -f ${FILENAME}.bz2 ]; then
+       rm ${ORIG_GZIPPED_FILENAME}
+    fi
+    
+    shift
+done
diff --git a/scripts/hv-backup b/scripts/hv-backup
new file mode 100755 (executable)
index 0000000..81e2c96
--- /dev/null
@@ -0,0 +1,91 @@
+#!/bin/bash
+
+# backup
+#
+# Creates a single compressed archive.
+
+if [ ! -f /etc/backup.conf ]; then
+    echo "Error: missing /etc/backup.conf configuration file."
+    exit 1
+fi
+
+# Read list of backup files/directories
+source /etc/backup.conf
+
+# Set default value if not specified
+: ${BKP_DEST_DIR:="./"}
+
+# Default value
+ARCHIVE_LABEL="backup-data-amd64-`date '+%Y-%m-%d'`"
+
+# Exclude files list
+EXC_LIST="/tmp/hv-backup-exclude-list"
+
+print_usage()
+{
+    echo "$(basename $0) - Backup files/directories."
+    echo "Usage: $(basename $0) [-h] [--label "label"]"
+}
+
+if [ ${#} -gt 0 ]; then
+    if [ "x${1}" = "x-h" ]; then
+       print_usage
+       exit 0
+    fi
+    if [ "x${1}" = "x--label" ]; then
+        if [ $# -lt 2 ]; then
+           echo "Missing arguments for --label option"
+           print_usage
+           exit 1
+        fi
+
+        ARCHIVE_LABEL=${2}
+        shift
+        shift
+
+        if [ $# = 0 ]; then
+           echo "No directory to backup specified"
+           print_usage
+           exit 1
+        fi
+    else
+       echo "Unknown arguments: ${@}"
+       print_usage
+       exit 1
+    fi
+fi
+
+ARCHIVE_NAME=${BKP_DEST_DIR}/${ARCHIVE_LABEL}.tar.bz2
+
+echo "ARCHIVE_LABEL=$ARCHIVE_LABEL"
+
+cat > ${EXC_LIST} << "EOF"
+/media/*
+/proc/*
+/dev/*
+/sys/*
+/tmp/*
+*.sock
+*.lock
+*/.gvfs*
+EOF
+
+# Finding sockets, and listing them in the exclude file.
+# Errors and warnings must be discarded because of .gvfs directory for example.
+# Even when using -prune option, find exits with a non-zero status when resding
+# .gvfs
+find ${BKP_FILES_LIST} -type s >> ${EXC_LIST} 2> /dev/null
+
+# Archiving
+tar jcf ${ARCHIVE_NAME} ${BKP_FILES_LIST} \
+    --label="${ARCHIVE_LABEL}" \
+    --ignore-failed-read \
+    --exclude-backups \
+    --exclude-caches \
+    --exclude-from=${EXC_LIST} \
+    --absolute-names \
+    --totals
+
+rm ${EXC_LIST}
+
+exit $?
diff --git a/scripts/hv-scan b/scripts/hv-scan
new file mode 100755 (executable)
index 0000000..6398599
--- /dev/null
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+# Numérisation d'un document texte, et conversion en PDF
+
+jpeg_quality=10
+color_mode="Gray"
+resolution="200"
+extension="pdf"
+scan_area="--scan-area Letter"
+PROG_NAME=$(basename $0)
+
+print_usage()
+{
+    echo "${PROG_NAME} -- Numérisation document 8.5\"x11\" en PDF"
+    echo "Usage: ${PROG_NAME} [OPTIONS...] FICHIER"
+    echo
+    echo "Options:"
+    echo "  -c   numérisation en couleur (défaut = noir et blanc)"
+    echo "  -h   display this help and exit"
+    echo "  -j   format de sortie JPEG (défaut = PDF)"
+    echo "  -q   qualité JPEG (défaut = 10)"
+    echo "            1 = basse qualité"
+    echo "          100 = haute qualité"
+    echo "  -r   résolution (défaut = 200 DPI)"
+    echo "  -p   taille photo, 8.5\"x5.5\" (défaut = 8.5\"x11\")"
+    echo
+}
+
+while getopts "chjpq:r:" flag ;do
+    case ${flag} in
+       c)
+           color_mode="Color"
+           ;;
+       j)
+           extension="jpg"
+           ;;
+       h)
+           print_usage
+            exit 0
+           ;;
+       p)
+           scan_area="-l 0 -t 0 -x 215.9 -y 150"
+           ;;
+       q)
+            jpeg_quality=${OPTARG}
+           ;;
+       r)
+            # JPEG resolution
+            resolution=${OPTARG}
+           ;;
+       ?)
+           echo "${PROG_NAME}: Option invalide: ${OPTARG}."
+           echo "Essayez \`${PROG_NAME} -h' pour plus d'informations."
+           exit 1
+           ;;
+    esac
+done
+shift `expr "${OPTIND}" - 1`
+
+# `$#' now represents the number of arguments after the options.
+# `$1' is the first argument, etc.
+if [ $# -gt 1 ]; then
+    echo "${PROG_NAME}: Too many arguments."
+    echo "Essayez \`${PROG_NAME} -h' pour plus d'informations."
+    exit 1
+fi
+
+if [ ${#} -ne 1 ]; then
+    echo "${PROG_NAME}: Nom de fichier manquant."
+    echo "Essayez \`${PROG_NAME} -h' pour plus d'informations."
+    exit 1
+fi
+
+src=${1}
+
+scanimage --mode ${color_mode} --resolution ${resolution} ${scan_area} | \
+    convert - -compress jpeg -quality ${jpeg_quality} ${src}.${extension}
diff --git a/scripts/hv-video-dvd b/scripts/hv-video-dvd
new file mode 100755 (executable)
index 0000000..b3e5f9f
--- /dev/null
@@ -0,0 +1,140 @@
+#!/bin/sh
+
+#====================================================
+# Options modifiables par l'usager.
+#====================================================
+
+# Pour convertir une portion seulement, ajouter: "-ss 00:00:00 -t 00:00:30"
+START_TIME="00:00:00"
+#DURATION="00:01:00"
+
+# Taille du fichier de sortie selon le video bitrate,
+# pour un fichier source AVI de 345M:
+# 
+#   Non-spécifié: 811M
+#   2000k:        726M
+#   1400k:        594M
+
+# 1 ou 2
+PASSES=1
+
+#====================================================
+# Fin des options modifiables par l'usager.
+#====================================================
+
+print_usage()
+{
+    echo "Usage: ${PROG_NAME} [OPTION]... FICHIER"
+    echo ""
+    echo "Conversion d'un fichier vidéo AVI au format MPEG-2 pour créer un DVD vidéo."
+    echo ""
+    echo "Options:"
+    echo "  -a     Display Aspect Ratio du DVD, 4:3 (avec barres noires ajoutées) ou 16:9 (widescreen)"
+    echo "  -b     video bitrate (ex: -b 1400k)"
+    echo "  -h     affiche cette aide et termine"
+    echo "  -o     nom du fichier de sortie"
+    echo "  -s     taille du fichier source [WxH]"
+    echo "  -w     grave le DVD"
+}
+
+#====================================================
+# Options de la ligne de commande
+#====================================================
+
+while getopts "a:b:ho:s:w" flag ;do
+    case ${flag} in
+       a)
+            # Display Aspect Ratio of DVD, 4:3 (with blank bars added) or 16:9 (widescreen)
+            dvd_dar=${OPTARG}
+           ;;
+       b)
+            # Video bitrate
+            video_bitrate=${OPTARG}
+           ;;
+       h)
+           print_usage
+            exit 0
+           ;;
+       o)
+           outfile=${OPTARG}
+            ;;
+       s)
+           src_size=${OPTARG}
+            ;;
+       w)
+           bruler="yes"
+           ;;
+       ?)
+           echo "${PROG_NAME}: Option invalide: ${OPTARG}."
+           echo "Essayez \`${PROG_NAME} -h' pour plus d'informations."
+           exit 1
+           ;;
+    esac
+done
+shift `expr "${OPTIND}" - 1`
+
+# `$#' now represents the number of arguments after the options.
+# `$1' is the first argument, etc.
+if [ $# -ne 1 ]; then
+    echo "Erreur: fichier source non-spécifié."
+    echo "Essayez \`${PROG_NAME} -h' pour plus d'informations."
+    exit 1
+fi
+
+INFILE="${1}"
+
+if [ -z ${outfile} ]; then
+    outfile="$(basename ${INFILE} .avi).mpg"
+fi
+
+if [ -z ${DURATION} ]; then
+    ARG_DURATION=""
+else
+    ARG_DURATION="-t ${DURATION}"
+fi
+
+if [ "x${dvd_dar}" = "x16:9" ]; then
+    ARG_WIDESCREEN="-w"
+else
+    ARG_WIDESCREEN=""
+fi
+
+if [ -z ${video_bitrate} ]; then
+    ARG_VIDEO_BIT_RATE=""
+else
+    ARG_VIDEO_BIT_RATE="-b ${video_bitrate}"
+fi
+
+if [ -z ${src_size} ]; then
+    echo "Erreur: taille du fichier source non-spécifiée."
+    exit 1
+fi
+
+#====================================================
+# Obtention des options à utiliser avec FFMPEG
+#====================================================
+DVD_CONVERSION_OPTIONS=$(fix-avi ${ARG_WIDESCREEN} ${src_size} )
+# -y : Overwrite output files.
+FFMPEG_OPT="-y -ss ${START_TIME} ${ARG_DURATION} -target ntsc-dvd ${ARG_VIDEO_BIT_RATE} ${DVD_CONVERSION_OPTIONS}"
+
+if [ ! -f ${INFILE} ]; then
+    echo "Erreur: fichier source absent."
+    exit 1
+fi
+
+if [ -f ${outfile} ]; then
+    echo "Fichier <${outfile}> déjà convertit, terminé."
+else
+    for passe in $(seq ${PASSES}); do
+        if [ "x${PASSES}" = "x1" ]; then
+            PASSES_OPT=""
+        else
+            PASSES_OPT="-pass $passe"
+        fi
+        
+        echo "FFMPEG options: ${PASSES_OPT} ${FFMPEG_OPT}"
+        ffmpeg ${PASSES_OPT} -i ${INFILE} ${FFMPEG_OPT} ${outfile} || exit 1
+    done
+fi
+
+exit $?
diff --git a/scripts/mail-files b/scripts/mail-files
new file mode 100755 (executable)
index 0000000..b910580
--- /dev/null
@@ -0,0 +1,307 @@
+#!/bin/sh
+
+# script to email files as attachments.
+# ------------------------------------
+
+# Additional documentation for this script, including a brief introdcution 
+# to MIME can be found at:  http://home.clara.net/dwotton/unix/mail_files.htm
+
+# Written: Dave Wotton, July 1998, (Cambridge UK)
+#          This script comes with no warranty or support. You are
+#          free to modify it as you wish, but please retain an
+#          acknowledgement of my original authorship.
+
+# Amended: Dave Wotton, 6/3/99
+#          -t flag now optional. subject also optional
+#
+# Amended: Dave Wotton, 3/8/00
+#          added -b and -u  options. By default a file-list which is not
+#          preceded by a -n, -b, or -u flag is now NOT encoded (the previous
+#          default was to base64 encode it.).
+#
+# Amended: Dave Wotton, 10/10/00
+#          added a -c (cc:) option.
+#          Added a tty -s test to prevent the prompt to enter the text body
+#          being displayed when not connected to a tty. (The text body is
+#          still required though. /dev/null will suffice.)
+#
+# Amended: Dave Wotton, 24/2/01
+#          Now uses perl to perform the base64 encoding, as it comes as
+#          standard on most modern Unixes. (You need the perl MIME package
+#          though, which I believe is standard. )
+
+# Amended: Dave Wotton, 22/09/01
+#          Now creates a "To:" header and uses the sendmail -t flag to
+#          duplicate this as the envelope recipients, rather than using the
+#          user supplied list of addresses simply as envelope recipients.
+#          This confused some mail clients, specifically Lotus Notes.
+
+# Amended: Dave Wotton, 30/09/01
+#          Now initialises the main variables, so that previously set
+#          environment variable values (eg. $CC) aren't used instead.
+#          Enable multiple occurrences of the -t and -c flags. Thanks to
+#          Jason Judge for these suggestions.
+
+
+# Usage:   mail_files [-t] mailid [ -c mailid ] [ -s subject ] [ -f mailid ] 
+#          [-n file_list] [-u file_list] [-b file_list] file_list
+#
+#    -f      : The mailid of the sender ( defaults to your userid )
+#              Only userids that have been defined as "trusted" in the sendmail
+#              config file can make use of the -f option. For non-trusted users
+#              any value specified by this parameter will be ignored by 
+#              sendmail.
+#    -t      : The mailid of the recipient. Mandatory, no default
+#              multiple mailids can be specified, separated by commas.
+#    -c      : The mailid of any carbon-copy recipients. Optional.
+#              multiple mailids can be specified, separated by commas.
+#    -s      : The subject string. Optional, default = "Not specified".
+#              Enclose in quotes.
+#    -n      : no-encode: indicates a list of files which are NOT to be base64
+#              or uuencode encoded. Multiple files may be enclosed in double
+#              quotes. Usual wildcard notation can be used. This option is
+#              for completeness and can be omitted because the default action 
+#              is not to encode the file-list.
+#    -b      : base64 encoding: indicates a list of files which are to be 
+#              base64 encoded. Multiple files may be enclosed in double quotes.
+#              Usual wildcard notation can be used.
+#    -u      : uuencode encoding: indicates a list of files which are to be 
+#              uuencode encoded. Multiple files may be enclosed in double 
+#              quotes. Usual wildcard notation can be used.
+#  file_list : The list of files to send as attachments with no-encoding
+#              (same as -n option, but the file list does not need to be
+#              enclosed in quotes if more than one file specified). 
+#              Usual wildcard notation can be used.
+
+# The program will also prompt for text to be supplied on standard input
+# as the main text of the message.
+
+# eg.
+#      1) mail_files Dave.Wotton -b file9.gif t*.htm < /dev/null
+#
+#         email file9.gif as a base64 encoded attachment and the t*.htm
+#         files unencoded.
+#
+#      2) mail_files Dave.Wotton -s "my test" -b "file1.gif file2.gif" \
+#                    < /dev/null
+#
+#         email file1.gif and file2.gif as base64 encoded attachments.
+
+# The script makes use of perl's MIME package to perform the base-64 
+# encoding/decoding. 
+
+# Note that files destined for Windows environments should have a name of
+# the form aaaa.bbb where aaaa is up to 8 characters long, and bbb is a
+# 3 character sufix. The suffix determines which program is used to
+# display/process the data at the remote end.
+
+# Simple text files can be emailed unencoded. Binary files, or text files
+# with long lines ( ie > 1000 chars ) should use the  base64 or uuencode 
+# encoding procedures. Base64 is preferred because it is more universally
+# supported. In particular, most PC mail-clients can automatically decode
+# base64 encoded attachments. Note that simple text files with short lines 
+# which are destined for PC environments should not be base64 encoded.
+# This is because PCs use a different line-break character to Unix.
+# If the text is base64 encoded, the line-breaks are not converted
+# automatically and so the data arrives at the remote end without
+# line-breaks.
+
+# set up a 'usage' routine
+# ------------------------
+
+usage()
+{
+  [ "$1" ] && ( echo $* ; echo "" )
+
+  cat <<!
+  Usage:   mail_files [-t] mailid [ -c mailid ] [ -s subject ] [ -f mailid ] 
+           [-n file_list] [-u file_list] [-b file_list] file_list
+!
+  exit 4
+}
+
+# Initialise main variables ...
+# -------------------------
+
+FROM=$LOGNAME
+SUBJ=${SUBJ:-"Not specified"}
+
+TO="" ; CC="" ; SUBJ="" ; NOENC="" ; BASE64="" ; UUE=""
+
+# First parse the command line options. Using getopts means the parameters
+# can be supplied in any order. But first we handle the first parameter,
+# which may be a recipient, without a -t flag...
+
+case "$1" in
+   -* ) : ;;                   # ignore it, let getopts handle flags
+    * ) TO=$1 ; shift ;;
+esac
+
+while getopts f:s:t:c:n:b:u: OPT
+do
+     case $OPT in
+         "f" ) FROM=$OPTARG ;;
+         "t" ) TO="$TO,$OPTARG" ;;
+         "c" ) CC="$CC,$OPTARG" ;;
+         "s" ) SUBJ=$OPTARG ;;
+         "n" ) NOENC="$NOENC $OPTARG" ;;
+         "b" ) BASE64="$BASE64 $OPTARG" ;;
+         "u" ) UUE="$UUE $OPTARG" ;;
+          *  ) usage ;;
+     esac
+done
+
+shift `expr $OPTIND - 1`
+
+if [ "$TO" = "" ]
+then
+    usage "An addressee must be specified"
+fi
+
+# All remaining parameters are files not requiring encoding ...
+# ---------------------------------------------------------
+
+# Build up $FILES as the list of non-encoded files. Use sed to remove
+# any leading space from the variable.
+
+FILES=`echo $NOENC $*|sed 's/^ //'`
+
+if [ "$BASE64" = "" -a "$FILES" = "" -a "$UUE" = "" ]
+then
+    usage "At least one file must be specified"
+fi
+
+# Remove leading commas from TO, CC  ...
+# ---------------------------------
+
+TO=`echo $TO | sed 's/^,//'`
+CC=`echo $CC | sed 's/^,//'`
+
+# Validate that the files exist ...
+# -----------------------------
+
+for F in $FILES $BASE64 $UUE
+do
+   if [ ! -r $F ]
+   then
+      echo "Error: File $F does not exist / is not readable."
+      echo "Exiting. ( Mail not sent )."
+      exit
+   fi
+done
+
+tty -s && echo "Enter text of main message ( finish with CTRL-D ) ..."
+
+# Now do the work ...
+# ---------------
+
+# The generated mail message is output onto standard out, which is then
+# piped in to sendmail.
+
+(
+cat <<!
+From: $FROM
+Subject: $SUBJ
+To: $TO
+!
+
+[ "$CC" ] && echo "Cc: $CC"
+
+cat <<!
+Mime-Version: 1.0
+Content-Type: multipart/mixed; boundary="DMW.Boundary.605592468"
+
+This is a Mime message, which your mail program may not understand. Parts
+of the message will appear as text. If the remainder appears as random
+characters in the message body, instead of as attachments, then you'll
+have to extract these parts and decode them manually.
+
+--DMW.Boundary.605592468
+Content-Type: text/plain; name="message.txt"; charset=US-ASCII
+Content-Disposition: inline; filename="message.txt"
+Content-Transfer-Encoding: 7bit
+
+!
+
+# Read the standard input as the main text of the message ...
+# -------------------------------------------------------
+
+cat - 
+
+# Now process the non-encrypted attachments ...
+# -----------------------------------------
+
+if [ "$FILES" ]
+then
+    for F in $FILES
+    do
+
+       BASE=`basename $F`
+
+       echo --DMW.Boundary.605592468
+       echo Content-Type: application/octet-stream\; name=\"$BASE\"
+       echo Content-Disposition: attachment\; filename=\"$BASE\"
+       echo Content-Transfer-Encoding: 7bit
+       echo
+
+       cat $F
+
+    done
+fi
+
+# Now process the base64 encrypted attachments ...
+# --------------------------------------------
+
+if [ "$BASE64" ]
+then
+    for F in $BASE64
+    do
+
+       BASE=`basename $F`
+
+       echo --DMW.Boundary.605592468
+       echo Content-Type: application/octet-stream\; name=\"$BASE\"
+       echo Content-Disposition: attachment\; filename=\"$BASE\"
+       echo Content-Transfer-Encoding: base64
+       echo
+
+       perl -e '
+       use MIME::Base64 qw(encode_base64);
+       local($/) = undef;
+       print encode_base64(<STDIN>);' < $F
+
+    done
+fi
+
+# Now process the uuencode encrypted attachments ...
+# ----------------------------------------------
+
+# Sorry, this bit is untested - I haven't got a mail-client which can
+# handle uuencoded MIME messages automatically, so can't test if the
+# 'Content-Transfer-Encoding: uuencode' line is correct and whether I
+# need the uuencode "begin" and "end" lines.
+
+if [ "$UUE" ]
+then
+    for F in $UUE
+    do
+
+       BASE=`basename $F`
+
+       echo --DMW.Boundary.605592468
+       echo Content-Type: application/octet-stream\; name=\"$BASE\"
+       echo Content-Disposition: attachment\; filename=\"$BASE\"
+       echo Content-Transfer-Encoding: uuencode
+       echo
+
+       uuencode < $F xxx 
+
+    done
+fi
+
+# append the final boundary line ...
+
+echo --DMW.Boundary.605592468--
+
+) | /usr/sbin/sendmail -t -r ${FROM}
+#> test.txt
diff --git a/scripts/mail-if-fail b/scripts/mail-if-fail
new file mode 100755 (executable)
index 0000000..733ff9b
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# This script is used to run a command. If the command failed,
+# an email is sent to the address specified by MAILTO.
+
+# Begin of user modifiable variables
+MAILFROM="${USER}"
+MAILTO="root"
+# End of User modifiable variables
+
+SENDMAIL="/usr/sbin/sendmail -t -r ${MAILFROM}"
+MAILFILE="/tmp/mail-if-fail-output$$"
+LOGFILE="/tmp/mail-if-fail-log$$"
+
+# Running the specified command
+${*} 1> ${LOGFILE} 2>&1
+
+ERROR_CODE=${?}
+
+if [ ${ERROR_CODE} -ne "0" ]; then
+    echo "From: ${MAILFROM}" > ${MAILFILE}
+    echo "To: ${MAILTO}" >> ${MAILFILE}
+    echo "Subject: \"${1}\" FAILED (${ERROR_CODE})" >> ${MAILFILE}
+    echo "Content-type: text/plain" >> ${MAILFILE}
+    echo "Output of command ${*}:" >> ${MAILFILE}
+    echo >> ${MAILFILE}
+    cat ${LOGFILE} >> ${MAILFILE}
+    cat ${MAILFILE} | ${SENDMAIL} || exit 1
+    rm -f ${MAILFILE}
+fi
+
+rm -f ${LOGFILE}
+
+exit ${ERROR_CODE}
diff --git a/scripts/mail-statistics b/scripts/mail-statistics
new file mode 100755 (executable)
index 0000000..565aff8
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# Sendmail and Procmail log file analyzer
+
+# If no parameters are given, use current log file
+if [ ${#} = 0 ]; then
+    SUFFIX=""
+    SUBDIR=""
+elif [ $# -eq 1 ]; then
+    SUFFIX=".$1"
+    SUBDIR="backup"
+else
+    echo "Usage: $0 [log file number]"
+    exit 1
+fi
+
+
+SM_LOG_FILE=/var/log/${SUBDIR}/mail.log${SUFFIX}
+PM_LOG_FILE=/var/log/${SUBDIR}/procmail.log${SUFFIX}
+
+
+# Computes a ratio
+# arg 1: numerator
+# arg 2: denumerator
+hv_ratio()
+{
+    echo $(( ( ( ${1} * 100000 ) / ${2} ) / 1000 ))
+}
+
+
+# Sendmail (MTA) statistics
+SM_REJECTED=$(cat ${SM_LOG_FILE} | grep 'ruleset=' | wc -l)
+SM_ACCEPTED=$(cat ${SM_LOG_FILE} | grep 'stat=Sent' | grep 'mailer=local' | wc -l)
+SM_TOTAL=$(( ${SM_REJECTED} + ${SM_ACCEPTED} ))
+
+# Procmail (MDA) statistics
+SPAM_COUNT=$(cat ${PM_LOG_FILE} | grep 'procmail: Match on \"\^X-Spam-Status: Yes' | wc -l)
+HAM_COUNT=$(cat ${PM_LOG_FILE} | grep 'procmail: No match on \"\^X-Spam-Status: Yes' | wc -l)
+SA_TOTAL=$(( ${SPAM_COUNT} + ${HAM_COUNT} ))
+
+echo "Sendmail statistics (MTA):"
+echo "  Accepted: $((${SM_ACCEPTED}))"
+echo "  Total:    ${SM_TOTAL}"
+echo "  Ratio:    $(hv_ratio ${SM_ACCEPTED} ${SM_TOTAL})%"
+echo "SpamAssassin statistics:"
+echo "  Spam:     $((${SPAM_COUNT}))"
+echo "  Total:    ${SA_TOTAL}"
+echo "  Ratio:    $(hv_ratio ${SPAM_COUNT} ${SA_TOTAL})%"
+
+exit 0
diff --git a/scripts/media-write b/scripts/media-write
new file mode 100755 (executable)
index 0000000..e66dba6
--- /dev/null
@@ -0,0 +1,157 @@
+#!/bin/sh
+
+# Write files/directories on CD or DVD
+
+# Load configuration informations about device
+. /etc/sysconfig/cdrecord
+
+# Maximum size in Mbytes
+CD_MEDIA_SIZE=700
+DVD_MEDIA_SIZE=4400
+
+GROWISOFS_OPTS="-dvd-compat"
+
+# Try to read ATIP infos for CD disks to estimate capacity...
+MEDIA_ATIP_INFOS=$(cdrecord dev=${MEDIA_DEV} -atip 2>&1)
+
+if echo ${MEDIA_ATIP_INFOS} | grep -q "ATIP info from disk"; then
+    MEDIA_SIZE=${CD_MEDIA_SIZE}
+    MEDIA_TYPE="CD"
+    echo "CD disk detected"
+elif echo ${MEDIA_ATIP_INFOS} | grep -q "Found DVD media but"; then
+    MEDIA_SIZE=${DVD_MEDIA_SIZE}
+    MEDIA_TYPE="DVD"
+    echo "DVD disk detected"
+elif echo ${MEDIA_ATIP_INFOS} | grep -q "cdrecord: No disk / Wrong disk"; then
+    echo "No disk inserted, aborting"
+    exit 1
+else
+    echo "Unable to determine disk capacity, aborting"
+    exit 1
+fi
+
+echo "Disk capacity is ${MEDIA_SIZE} Mbytes"
+
+BKP_TMP_DIR=${BKP_TMP_DIR:-"/tmp"}
+TMP_FILE="${BKP_TMP_DIR}/media-write-file$$"
+TMP_MOUNT="${BKP_TMP_DIR}/media-write-mount$$"
+
+print_usage()
+{
+    echo "Usage: $(basename $0) files..."
+}
+
+evaluate_retval()
+{
+    last_error=$?
+    if [ ${last_error} -ne 0 ]; then
+       exit ${last_error}
+    fi
+}
+
+if [ $# = 0 ]; then
+    print_usage
+    exit 1
+fi
+
+FILES_SIZE="0"
+
+FILES_WRITE_LIST=${*}
+
+for file in ${FILES_WRITE_LIST}; do
+    if [ -d ${file} -o -f ${file} ]; then
+        FILES_SIZE=$(expr ${FILES_SIZE} + `du -m ${file} -s | sed 's/\([0-9]*\).*/\1/g'`)
+    else
+       echo "$0: Directory or file ${file} not found."
+       print_usage
+       exit 1
+    fi
+done
+
+echo "Total size of files to backup is ${FILES_SIZE}Mbytes"
+
+# The ext2 filesystem is not as space-efficient as the reiser filesystem,
+# so we must add a few megabytes...
+FILES_SIZE=`expr $FILES_SIZE + 20`
+
+if [ ${FILES_SIZE} -gt ${MEDIA_SIZE} ]; then
+    echo "Total size is greater than media capacity, aborting"
+    exit 1
+    #####FILES_SIZE=${MEDIA_SIZE}
+fi
+
+# Create an empty file of $FILES_SIZE
+dd if=/dev/zero of=${TMP_FILE} bs=1024k count=${FILES_SIZE}
+if [ $? -ne 0 ]; then
+    echo "Error while creating empty file..."
+    rm -f ${TMP_FILE}
+    exit 1
+fi
+
+# Create an extended-2 filesystem on this file
+echo y | /sbin/mke2fs -m 0 -b 2048 ${TMP_FILE}
+if [ $? -ne 0 ]; then
+    echo "Error creating file system on empty file..."
+    rm -f ${TMP_FILE}
+    exit 1
+fi
+
+# Mount this empty file through the loopback device.
+mkdir -p ${TMP_MOUNT}
+mount -o loop -t ext2 ${TMP_FILE} ${TMP_MOUNT}
+if [ $? -ne 0 ]; then
+    echo "Error mounting empty file..."
+    rm -f ${TMP_FILE}
+    rm -rf $TMP_MOUNT
+    exit 1
+fi
+
+# Removing lost+found directory
+rmdir ${TMP_MOUNT}/lost+found
+
+# Copy files to $TMP_MOUNT and umount it afterwards.
+echo "Copying files..."
+cp -a --parents ${FILES_WRITE_LIST} ${TMP_MOUNT}
+if [ $? -ne 0 ]; then
+    echo "Error while copying files..."
+    umount ${TMP_MOUNT}
+    rm -rf ${TMP_MOUNT}
+    rm -f ${TMP_FILE}
+    exit 1
+fi
+
+umount ${TMP_MOUNT}
+
+echo Press any key to burn files
+read
+
+#***************************************************
+# Burning...
+#***************************************************
+case "${MEDIA_TYPE}" in
+    CD)
+        cdrecord ${CDRECORD_OPTS} dev=${MEDIA_DEV} -data ${TMP_FILE} || exit 1
+       ;;
+    DVD)
+        growisofs ${GROWISOFS_OPTS} -Z /dev/dvd=${TMP_FILE} || exit 1
+       ;;
+    *)
+       echo "Unknown removable media type, aborting"
+       exit 1
+       ;;
+esac
+
+# Mounting the media to verify burned capacity
+if ! grep -q ${MEDIA_DEV} /etc/mtab; then
+    mount ${MEDIA_DEV} ${MEDIA_DIR} || exit 1
+fi
+
+FILES_SIZE=$(du -m ${MEDIA_DIR} -s | sed 's/\([0-9]*\).*/\1/g')
+echo "Total size of files backed-up is ${FILES_SIZE}Mbytes"
+
+umount ${MEDIA_DIR}
+
+rmdir ${TMP_MOUNT}
+rm -f ${TMP_FILE}
+
+exit $?
diff --git a/scripts/pstopdf b/scripts/pstopdf
new file mode 100755 (executable)
index 0000000..36e3b1c
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+print_usage()
+{
+    echo "pstopdf -- Translates multiple Postscript files into a"
+    echo "           unique PDF document."
+    echo "Usage: $(basename $0) [OPTION]... [FILE]..."
+    echo
+    echo "  -o filename     Specify the name of the generated PDF file. The"
+    echo "                  default is 'output.pdf'."
+}
+
+while getopts ":o:" opt; do
+    case $opt in
+       o )
+           PDF_FILE=$OPTARG
+           ;;
+       \? )
+           print_usage
+           ;;
+    esac
+done
+
+if [ -z "${PDF_FILE}" ]; then
+    PDF_FILE="output.pdf"
+fi
+
+shift $(($OPTIND - 1))
+
+if [ $# -eq 0 ]; then
+    print_usage
+    exit 1
+fi
+
+gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=${PDF_FILE} $@
+
+exit 0
diff --git a/scripts/replace.pl b/scripts/replace.pl
new file mode 100755 (executable)
index 0000000..8347be6
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl -w
+#
+# Usage:  replace.pl original_string replacement_string input_filename
+# This Perl script changes the string $original to $replacement in all files
+# specified on the command line.
+# 19950926 gkj
+$original=$ARGV[0];
+$replacement=$ARGV[1];
+# The input record separator is defined by Perl global
+# variable $/.  It can be anything, including multiple
+# characters.  Normally it is "\n", newline.  Here, we
+# say there is no record separator, so the whole file
+# is read as one long record, newlines included.
+undef $/;
+
+$file=$ARGV[2];
+
+if (! open(INPUT,"<$file") ) {
+    print STDERR "Can't open input file $bakfile\n";
+    exit(0);
+}
+
+# Read input file as one long record.
+$data=<INPUT>;
+close INPUT;
+
+if ($data =~ s/$original/$replacement/gi) {
+    $bakfile = "$file.bak";
+    # Abort if can't backup original or output.
+    if (! rename($file,$bakfile)) {
+       die "Can't rename $file $!";
+    }
+    if (! open(OUTPUT,">$file") ) {
+       die "Can't open output file $file\n";
+    }
+    print OUTPUT $data;
+    close OUTPUT;
+    print STDERR "$file changed\n";
+}
+else {
+    print STDERR "$file not changed\n";
+}
+
+exit(0);
diff --git a/scripts/rotatelogs b/scripts/rotatelogs
new file mode 100755 (executable)
index 0000000..dd5cc41
--- /dev/null
@@ -0,0 +1,98 @@
+#!/bin/sh
+#
+# rotatelogs - rotate log files (local host)
+#
+
+BACKUP_LOGDIR="/var/log/backup"
+
+LOGDIR_GLOBAL=/var/log
+LOGFILES_GLOBAL="auth.log clamd.log freshclam.log cron.log daemon.log kern.log mail.log procmail.log scrollkeeper.log sys.log user.log xdm.log Xorg.0.log"
+
+LOGDIR_APACHE=/var/log/apache
+LOGFILES_APACHE="access_log error_log ssl_request_log"
+
+LOGDIR_CUPS=/var/log/cups
+LOGFILES_CUPS="access_log error_log"
+
+LOGDIR_NAMED=/srv/named/etc/namedb
+LOGFILES_NAMED="named.run"
+
+# arg 1: Backup log directory
+# arg 2: log filename
+rotate_log()
+{
+    backup_log_dir=${1}
+    file=${2}
+
+    for day in 8 7 6 5 4 3 2 1 0 ; do
+       if [ -f ${backup_log_dir}/${file}.${day} ]; then
+           mv ${backup_log_dir}/${file}.${day} ${backup_log_dir}/${file}.$((${day}+1)) || exit 1
+       fi
+    done
+
+    if [ -f ${file} ]; then
+       user=$(ls -l --numeric-uid-gid ${file} | awk '{ print $3 }')
+       group=$(ls -l --numeric-uid-gid ${file} | awk '{ print $4 }')
+       cp -a ${file} ${backup_log_dir}/${file}.0 || exit 1
+    fi
+
+    # Empty file
+    cp /dev/null ${file} &&
+    chown ${user}.${group} ${file} &&
+    chmod 640 ${file}
+
+    return $?
+}
+
+if [ ! -d ${BACKUP_LOGDIR} ]; then
+    mkdir ${BACKUP_LOGDIR}
+fi
+
+# syslogd files
+LOGDIR=${LOGDIR_GLOBAL}
+cd ${LOGDIR} &&
+for file in ${LOGFILES_GLOBAL}; do
+    rotate_log ${BACKUP_LOGDIR} ${file} || exit 1
+done
+
+kill -HUP `cat /var/run/syslogd.pid`  &&
+
+# named (BIND) server log files (if installed)
+LOGDIR=${LOGDIR_NAMED}
+if [ -d ${LOGDIR} ]; then
+    cd ${LOGDIR} &&
+    for file in ${LOGFILES_NAMED}; do
+        rotate_log ${BACKUP_LOGDIR} ${file} || exit 1
+    done
+
+    kill -HUP `cat /srv/named/var/run/named.pid` || exit 1
+fi
+
+# For Apache web server (if installed)
+LOGDIR=${LOGDIR_APACHE}
+if [ -d ${LOGDIR} ]; then
+    if [ ! -d ${BACKUP_LOGDIR}/apache ]; then
+        mkdir -p ${BACKUP_LOGDIR}/apache
+    fi
+    cd ${LOGDIR} &&
+    for file in ${LOGFILES_APACHE}; do
+        rotate_log ${BACKUP_LOGDIR}/apache ${file} || exit 1
+    done
+
+    /usr/sbin/apachectl graceful &&
+    sleep 2
+fi
+
+# For CUPS
+LOGDIR=${LOGDIR_CUPS}
+if [ -d ${LOGDIR} ]; then
+    if [ ! -d ${BACKUP_LOGDIR}/cups ]; then
+        mkdir -p ${BACKUP_LOGDIR}/cups
+    fi
+    cd ${LOGDIR} &&
+    for file in ${LOGFILES_CUPS}; do
+        rotate_log ${BACKUP_LOGDIR}/cups ${file} || exit 1
+    done
+fi
+
+exit $?
diff --git a/scripts/setdate b/scripts/setdate
new file mode 100755 (executable)
index 0000000..ce2f14e
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+rm /var/lib/hwclock/adjtime
+hwclock --localtime --set --date "2004/03/02 23:56:00"
+hwclock --localtime --hctosys
+date
diff --git a/scripts/strip-debug-symbols b/scripts/strip-debug-symbols
new file mode 100755 (executable)
index 0000000..6adf92a
--- /dev/null
@@ -0,0 +1,2 @@
+find /{,usr/,usr/local/}{bin,sbin,lib} -type f -exec /usr/bin/strip --strip-debug '{}' ';'
+
diff --git a/scripts/tape-backup b/scripts/tape-backup
new file mode 100755 (executable)
index 0000000..1782eaf
--- /dev/null
@@ -0,0 +1,91 @@
+#!/bin/sh
+
+# tape-backup
+#
+# Creates a single archive on tape. After the backup is finished,
+# the tape is rewound.
+
+# Read configuration informations
+source /etc/backup.conf
+
+# Exclude files list
+EXC_LIST="/tmp/exclude-sockets"
+
+print_usage()
+{
+    echo "$(basename $0) - Backup directories/files, starting at the beginning of the tape."
+    echo "              After the backup is finished, the tape is rewound."
+    echo "Usage: $(basename $0) [-h] [--label "label"] DIR1 DIR2 ..."
+}
+
+if [ ${#} -gt 0 ]; then
+    if [ "x${1}" = "x-h" ]; then
+       print_usage
+       exit 0
+    fi
+fi
+
+if [ $# = 0 ]; then
+    echo "Missing arguments"
+    print_usage
+    exit 1
+fi
+
+if [ "x${1}" = "x--label" ]; then
+    if [ $# -lt 2 ]; then
+       echo "Missing arguments for --label option"
+       print_usage
+       exit 1
+    fi
+
+    TAPE_LABEL=${2}
+    shift
+    shift
+
+    if [ $# = 0 ]; then
+       echo "No directory to backup specified"
+       print_usage
+       exit 1
+    fi
+
+else
+    TAPE_LABEL="CVDS Linux Mail/Web Server Backup (`date '+%Y-%m-%d'`)."
+fi
+
+DIRECTORIES=${@}
+
+echo "TAPE_LABEL=$TAPE_LABEL"
+
+if ${MT} status | grep "ONLINE"; then
+    # Rewinding the tape
+    ${MT} rewind || exit 1
+
+    # Finding sockets
+    find ${DIRECTORIES} -type s > ${EXC_LIST} || exit 1
+
+    # Setting compression on
+    ${MT} compression 1 || exit 1
+
+    # Archiving
+    tar -cf /dev/tape ${DIRECTORIES} --ignore-failed-read --label="${TAPE_LABEL}" \
+       --exclude="*.sock" --exclude="*.lock" --exclude-from=${EXC_LIST} \
+       --absolute-names --totals || exit 1
+
+    if ! ${MT} status | grep "ONLINE"; then
+       echo "***** tape-drive status is not ONLINE"
+       exit 1
+    fi
+
+    # Rewinding the tape
+    ${MT} rewind || exit 1
+
+    # Ejecting tape
+    ${MT} offline || exit 1
+    
+    rm ${EXC_LIST}
+else
+    echo "***** WARNING TAPE DRIVE IS OFFLINE, NO BACKUPS PERFORMED"
+    exit 1
+fi
+
+exit $?
diff --git a/scripts/tape-backup-mult b/scripts/tape-backup-mult
new file mode 100755 (executable)
index 0000000..e07269f
--- /dev/null
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+# tape-backup-mult
+#
+# Creates archive at current position of tape, thus enabling creation of
+# multiple archives on a single tape. After the backup is finished,
+# the tape is NOT rewound.
+
+# Read configuration informations
+source /etc/backup.conf
+
+# Exclude files list
+EXC_LIST="/tmp/exclude-sockets"
+
+print_usage()
+{
+    echo "$(basename $0) - Backup directories/files, starting at the current position of the tape."
+    echo "                   After the backup is finished, the tape is NOT rewound."
+    echo "Usage: $(basename $0) [-h] [--label "label"] DIR1 DIR2 ..."
+}
+
+if [ ${#} -gt 0 ]; then
+    if [ "x${1}" = "x-h" ]; then
+       print_usage
+       exit 0
+    fi
+fi
+
+if [ $# = 0 ]; then
+    echo "Missing arguments"
+    print_usage
+    exit 1
+fi
+
+if [ "x${1}" = "x--label" ]; then
+    if [ $# -lt 2 ]; then
+       echo "Missing arguments for --label option"
+       print_usage
+       exit 1
+    fi
+
+    TAPE_LABEL=${2}
+    shift
+    shift
+
+    if [ $# = 0 ]; then
+       echo "No directory to backup specified"
+       print_usage
+       exit 1
+    fi
+
+else
+    TAPE_LABEL="Backup (`date '+%Y-%m-%d'`)"
+fi
+
+DIRECTORIES=${@}
+
+echo "TAPE_LABEL=$TAPE_LABEL"
+
+if ${MT} status | grep "ONLINE"; then
+
+    # We don't rewind the tape, we add a new archive at the current position of the tape.
+
+    # Finding sockets
+    # Removed, because the find command returned:  "find: /root/big-file.tar.bz2: Value too large for defined data type"
+    # (the file was 6G)
+    # find ${DIRECTORIES} -type s > ${EXC_LIST} || exit 1
+    echo "" > ${EXC_LIST}
+
+    # Setting compression on
+    ${MT} compression 1 || exit 1
+
+    # Archiving
+    tar -cf /dev/tape ${DIRECTORIES} --label="${TAPE_LABEL}" --exclude-from=${EXC_LIST} --absolute-names --totals || exit 1
+
+    if ! ${MT} status | grep "ONLINE"; then
+       echo "***** tape-drive status is not ONLINE"
+       exit 1
+    fi
+
+    rm ${EXC_LIST}
+else
+    echo "***** WARNING TAPE DRIVE IS OFFLINE, NO BACKUPS PERFORMED"
+    exit 1
+fi
+
+exit $?
diff --git a/scripts/tape-list b/scripts/tape-list
new file mode 100755 (executable)
index 0000000..d689cf6
--- /dev/null
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+# tape-list
+
+# Read configuration informations
+source /etc/backup.conf
+
+print_usage()
+{
+    echo "$(basename $0) - List content of tape archive."
+    echo "Usage: $(basename $0) [-h] [--label]"
+}
+
+if [ ${#} -gt 0 ]; then
+    if [ "x${1}" = "x-h" ]; then
+       print_usage
+       exit 0
+    fi
+fi
+
+if [ $# -gt 1 ]; then
+    print_usage
+    exit 1
+fi
+
+if [ $# = 1 ]; then
+    if [ "x${1}" != "x--label" ]; then
+       echo "Invalid argument"
+       print_usage
+       exit 1
+    fi
+
+    print_label="1"
+fi
+
+if ${MT} status | grep "ONLINE" 1> /dev/null 2>&1; then
+
+    # Rewinding the tape
+    ${MT} rewind || exit 1
+
+    file="0"
+    quit="0"
+
+    while [ ${quit} = "0" ]; do
+
+       file="$(( ${file} + 1 ))"
+
+       if [ "x${print_label}" = "x1" ]; then
+           echo "Label for archive #$file:"
+           tar tvf /dev/tape | grep "V---------"
+           if [ $? -ne 0 ]; then
+               echo "No archive #$file:"
+               quit="1"
+           fi
+       else
+           echo "Content of archive #$file:"
+           tar tvf /dev/tape || exit 1
+       fi
+
+       if [ ${quit} = "0" ]; then
+           # Position tape on next file
+           ${MT} fsf 1
+           if [ $? -ne 0 ]; then
+               quit="1"
+           fi
+       fi
+       
+    done
+
+else
+    echo "TAPE DRIVE IS OFFLINE, NO LISTING PERFORMED"
+    exit 1
+fi
+
+exit $?
diff --git a/scripts/tape-restore b/scripts/tape-restore
new file mode 100755 (executable)
index 0000000..5c101af
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# tape-restore
+
+# Read configuration informations
+source /etc/backup.conf
+
+print_usage()
+{
+    echo "$(basename $0) - Restore file or directory from tape."
+    echo "Usage: $(basename $0) [-h] FILE"
+}
+
+if [ ${#} -gt 0 ]; then
+    if [ "x${1}" = "x-h" ]; then
+       print_usage
+       exit 0
+    fi
+fi
+
+if [ $# != 1 ]; then
+    print_usage
+    exit 1
+fi
+
+if ${MT} status | grep "ONLINE"; then
+    # Rewinding the tape
+    ${MT} rewind || exit 1
+
+    # The tape is now positioned on the first archive
+    tar xvf /dev/tape ${@} || exit 1
+else
+    echo "TAPE DRIVE IS OFFLINE, NO RESTORE PERFORMED"
+fi
+
+exit $?
diff --git a/scripts/tarbz2 b/scripts/tarbz2
new file mode 100755 (executable)
index 0000000..e7a6d93
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+print_usage()
+{
+    echo "$(basename $0) -- Create bzip2 compressed TAR archive."
+    echo "Usage: $(basename $0) DIR"
+}
+
+if [ $# -ne 1 ]; then
+    print_usage
+    exit 1
+fi
+
+DIR=${1%/}
+BASE=$(basename ${DIR})
+
+# Checking if directory exists.
+if [ ! -d ${DIR} ]; then
+    echo "$0: Directory ${DIR} not found."
+    exit 1
+fi
+    
+# Decompressing file to standard output and piping result to bzip2
+tar cvf - ${DIR} | bzip2 -9 > ${BASE}.tar.bz2
+
+exit $?
diff --git a/scripts/tildes-clean b/scripts/tildes-clean
new file mode 100755 (executable)
index 0000000..8c7dfaa
--- /dev/null
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# No arguments --> clean the current directory
+
+PROG_NAME=$(basename $0)
+MAXDEPTH="-maxdepth 1"
+
+print_usage()
+{
+    echo "Usage: ${PROG_NAME} [OPTION]... [SOURCE]"
+    echo
+    echo "Remove emacs backup files (ending with \`~') in SOURCE directory."
+    echo "If no SOURCE directory is specified, the current directory is"
+    echo "taken as SOURCE. Directory names ending with \`~' are not"
+    echo "removed, only files."
+    echo
+    echo "Options:"
+    echo "  -h   display this help and exit"
+    echo "  -r   allow cleanning of subdirectories"
+    exit 0
+}
+
+while getopts "hr" flag ;do
+    case ${flag} in
+       h)
+           print_usage
+           ;;
+       r)
+           MAXDEPTH=""
+           ;;
+       ?)
+           echo "${PROG_NAME}: Invalid option: ${OPTARG}."
+           echo "Try \`${PROG_NAME} --help' for more information."
+           exit 1
+           ;;
+    esac
+done
+shift `expr "${OPTIND}" - 1`
+
+# `$#' now represents the number of arguments after the options.
+# `$1' is the first argument, etc.
+if [ $# -gt 1 ]; then
+    echo "${PROG_NAME}: Too many arguments."
+    echo "Try \`${PROG_NAME} --help' for more information."
+    exit 1
+fi
+
+if [ $# = 0 ]; then
+    source_dir="."
+else
+    source_dir="${1}"
+fi
+
+if [ ! -d ${source_dir} ]; then
+    echo "${PROG_NAME}: ${source_dir}: No such directory."
+    exit 1
+fi
+
+# We remove the trailing `/' at the end of directory, if present.
+source_dir=$(echo ${source_dir} | sed 's/\/$//g')
+
+find ${source_dir} ${MAXDEPTH} -name '*~' -exec /bin/rm '{}' +
+
+exit $?
diff --git a/scripts/vd b/scripts/vd
new file mode 100755 (executable)
index 0000000..9eb09a5
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+VCS_SUPPORTED="GIT, Subversion or Mercurial"
+
+print_usage()
+{
+    echo "$(basename $0) -- diff for version control (${VCS_SUPPORTED}) with color output."
+    echo "Usage: $(basename $0) [OPTIONS...]"
+}
+
+if [ "x${1}" = "x--help" ]; then
+    print_usage
+    exit 1
+fi
+
+if git diff 1> /dev/null 2>&1; then
+    git diff "$@"
+elif svn diff 1> /dev/null 2>&1; then
+    svn diff --diff-cmd colordiff -x "-u -w -p" "$@" | less -RFX
+elif hg status 1> /dev/null 2>&1; then
+    hg diff "$@"
+else
+    echo "Not a ${VCS_SUPPORTED} repository"
+    exit 1
+fi
diff --git a/scripts/vl b/scripts/vl
new file mode 100755 (executable)
index 0000000..a19a374
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+VCS_SUPPORTED="GIT, Subversion or Mercurial"
+
+print_usage()
+{
+    echo "$(basename $0) -- log for version control (${VCS_SUPPORTED})."
+    echo "Usage: $(basename $0) [OPTIONS...]"
+}
+
+if [ "x${1}" = "x--help" ]; then
+    print_usage
+    exit 1
+fi
+
+SVN_LOG_REV_INFO_COLOR=$(echo -e '\033[1;31m')  # Red
+SVN_LOG_SEPARATION_COLOR=$(echo -e '\033[1;32m')    # Green
+NORMAL=$(echo -e '\033[0m')
+
+if git diff 1> /dev/null 2>&1; then
+    git log "$@"
+elif svn diff 1> /dev/null 2>&1; then
+    # Colore les lignes --------- en vert
+    # Colore en rouge les infos de la révision
+    svn log "$@" | sed -e "s/^-\+$/${SVN_LOG_SEPARATION_COLOR}\0${NORMAL}/" \
+        -e "s/^r[0-9]\+.\+$/${SVN_LOG_REV_INFO_COLOR}\0${NORMAL}/" | less -RFX
+elif hg status 1> /dev/null 2>&1; then
+    hg glog "$@"
+else
+    echo "Not a ${VCS_SUPPORTED} repository"
+    exit 1
+fi
diff --git a/scripts/vs b/scripts/vs
new file mode 100755 (executable)
index 0000000..6719db1
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+VCS_SUPPORTED="GIT, Subversion or Mercurial"
+
+print_usage()
+{
+    echo "$(basename $0) -- status for version control (${VCS_SUPPORTED})."
+    echo "Usage: $(basename $0) [OPTIONS...]"
+}
+
+if [ "x${1}" = "x--help" ]; then
+    print_usage
+    exit 1
+fi
+
+SVN_ST_UNKNOWN_COLOR=$(echo -e '\033[1;34m')  # Blue
+SVN_ST_DELETED_COLOR=$(echo -e '\033[0;31m')  # Red
+SVN_ST_MISSING_COLOR=$(echo -e '\033[1;31m')  # Red
+SVN_ST_ADDED_COLOR=$(echo -e '\033[1;32m')    # Green
+SVN_ST_MODIFIED_COLOR=$(echo -e '\033[1;33m') # Yellow
+NORMAL=$(echo -e '\033[0m')
+
+if git diff 1> /dev/null 2>&1; then
+    git status "$@"
+elif svn diff 1> /dev/null 2>&1; then
+    svn status --ignore-externals "$@" | grep -v "^X" | \
+        sed -e "s/^\?.*$/${SVN_ST_UNKNOWN_COLOR}\0${NORMAL}/" \
+        -e "s/^!.*$/${SVN_ST_MISSING_COLOR}\0${NORMAL}/" \
+        -e "s/^A.*$/${SVN_ST_ADDED_COLOR}\0${NORMAL}/" \
+        -e "s/^M.*$/${SVN_ST_MODIFIED_COLOR}\0${NORMAL}/" \
+        -e "s/^D.*$/${SVN_ST_DELETED_COLOR}\0${NORMAL}/"
+elif hg status 1> /dev/null 2>&1; then
+    hg status "$@"
+else
+    echo "Not a ${VCS_SUPPORTED} repository"
+    exit 1
+fi