OSSP CVS Repository

ossp - Check-in [43]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 43
Date: 2000-Jun-17 16:30:49 (local)
2000-Jun-17 14:30:49 (UTC)
User:rse
Branch:
Comment: Import of OSSP Shiela
Tickets:
Inspections:
Files:
ossp-pkg/shiela/.configure      added-> 1.1.1.1
ossp-pkg/shiela/Makefile.in      added-> 1.1.1.1
ossp-pkg/shiela/TODO      added-> 1.1.1.1
ossp-pkg/shiela/VERSION      added-> 1.1.1.1
ossp-pkg/shiela/configure.in      added-> 1.1.1.1
ossp-pkg/shiela/shiela-install.pod      added-> 1.1.1.1
ossp-pkg/shiela/shtool      added-> 1.1.1.1

ossp-pkg/shiela/.configure -> 1.1.1.1

*** /dev/null    Mon Apr 29 05:37:11 2024
--- -    Mon Apr 29 05:41:51 2024
***************
*** 0 ****
--- 1,4 ----
+ :
+ ./configure \
+ --prefix=/sw/pkg/shiela \
+ "$@"


ossp-pkg/shiela/Makefile.in -> 1.1.1.1

*** /dev/null    Mon Apr 29 05:37:11 2024
--- -    Mon Apr 29 05:41:51 2024
***************
*** 0 ****
--- 1,91 ----
+ ##
+ ##  Makefile for Shiela
+ ##
+ 
+ @SET_MAKE@
+ 
+ SHELL       = /bin/sh
+ SHTOOL      = ./shtool
+ RM          = rm -f
+ SED         = sed
+ PERL        = @PATH_PERL@
+ CVS         = @PATH_CVS@
+ 
+ prefix      = @prefix@
+ exec_prefix = @exec_prefix@
+ bindir      = @bindir@
+ libdir      = @libdir@
+ includedir  = @includedir@
+ mandir      = @mandir@
+ 
+ all: shiela shiela.1 shiela-install shiela-install.1
+ 
+ shiela: shiela.pl
+        @$(SHTOOL) echo -e "%Bgenerating shiela%b"
+        $(SED) -e "s;#!\@PERL\@;#!$(PERL);" \
+        <shiela.pl >shiela && \
+        chmod a+x shiela
+ 
+ shiela-install: shiela-install.sh
+        @$(SHTOOL) echo -e "%Bgenerating shiela-install%b"
+        $(SED) -e "s;#!\@SH\@;#!$(SHELL);" \
+               -e "s;\@prefix\@;$(prefix);" \
+               -e "s;\@bindir\@;$(bindir);" \
+               -e "s;\@libdir\@;$(libdir);" \
+        <shiela-install.sh >shiela-install && \
+     chmod a+x shiela-install
+ 
+ shiela.1: shiela.pod
+        @$(SHTOOL) echo -e "%Bgenerating shiela.1%b"
+        V=`$(SHTOOL) version -l txt -d short VERSION`; \
+        D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
+        pod2man --section=1 --center="CVS ACL and Logging Facility" \
+                --release="$$D" --date="OSSP Shiela $$V" shiela.pod >shiela.1
+ 
+ shiela-install.1: shiela-install.pod
+        @$(SHTOOL) echo -e "%Bgenerating shiela-install.1%b"
+        V=`$(SHTOOL) version -l txt -d short VERSION`; \
+        D=`$(SHTOOL) version -l txt -d long VERSION | $(SED) -e 's;.*(;;' -e 's;).*;;'`; \
+        pod2man --section=1 --center="CVS ACL and Logging Facility" \
+                --release="$$D" --date="OSSP Shiela $$V" shiela-install.pod >shiela-install.1
+ 
+ install: all
+        $(SHTOOL) mkdir -f -p -m 755 $(bindir)
+        $(SHTOOL) mkdir -f -p -m 755 $(libdir)
+        $(SHTOOL) mkdir -f -p -m 755 $(mandir)/man1
+        $(SHTOOL) install -c -m 755 shiela $(bindir)/shiela
+        $(SHTOOL) install -c -m 644 shiela.1 $(mandir)/man1/shiela.1
+        $(SHTOOL) install -c -m 755 shiela-install $(bindir)/shiela-install
+        $(SHTOOL) install -c -m 644 shiela-install.1 $(mandir)/man1/shiela-install.1
+ 
+ clean:
+        $(RM) shiela shiela.1
+        $(RM) shiela-install shiela-install.1
+ 
+ distclean: clean
+        $(RM) config.cache config.status config.log
+        $(RM) Makefile
+ 
+ dist: distclean
+        @echo "Fixing source tree permissions"; \
+        $(SHTOOL) fixperm *
+        @V=`$(SHTOOL) version -l txt -d short VERSION`; \
+        echo "Rolling tarball shiela-$${V}.tar.gz:"; \
+        $(SHTOOL) tarball -o shiela-$${V}.tar.gz \
+                          -e 'CVS,\.cvsignore,^\.' -c 'gzip -9' -u ossp -g shiela .; \
+        ls -l shiela-$${V}.tar.gz
+ 
+ update-tools:
+        shtoolize -q -o shtool echo mkdir install tarball fixperm version path
+        $(RM) configure
+        autoconf
+ 
+ update-version:
+        V=`./shtool version -l txt -d short VERSION`; \
+     $(SED) -e "s/version = '.*'/version = '$$V'/" <shiela.pl >shiela.pl.n && mv shiela.pl.n shiela.pl; \
+     $(SED) -e "s/version=\".*\"/version=\"$$V\"/" <shiela-install.sh >shiela-install.sh.n && mv shiela-install.sh.n shiela-install.sh; \
+        V=`./shtool version -l txt -d long VERSION`; \
+        $(SED) -e "s/Version .*(.*)/Version $$V/g" <README >README.n && mv README.n README; \
+     $(SED) -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $$V/" <shiela.pod >shiela.pod.n && mv shiela.pod.n shiela.pod; \
+     $(SED) -e "s/B<OSSP Shiela> .*/B<OSSP Shiela> $$V/" <shiela-install.pod >shiela-install.pod.n && mv shiela-install.pod.n shiela-install.pod
+ 


ossp-pkg/shiela/TODO -> 1.1.1.1

*** /dev/null    Mon Apr 29 05:37:11 2024
--- -    Mon Apr 29 05:41:51 2024
***************
*** 0 ****
--- 1,60 ----
+    ____  _     _      _    
+   / ___|| |__ (_) ___| | __ _
+   \___ \| '_ \| |/ _ \ |/ _` |
+    ___) | | | | |  __/ | (_| |
+   |____/|_| |_|_|\___|_|\__,_|
+ 
+   Shiela - Access Control and Logging Facility for CVS
+   ____________________________________________________________________
+ 
+   TODO
+ 
+   For version 1.0:
+   ----------------
+ 
+   o  Subject can be compressed by reducing common prefix and 
+      just repeating the subdirs together with the files:
+      << [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP ossp-pkg/ossp-cvs/src cvsrc.c
+      >> [CVS] OSSP: ossp-pkg/ossp-cvs README.OSSP src/cvsrc.c
+      Eventuell sogar auf module reduzieren:
+      >> [CVS] OSSP ossp-cvs: README.OSSP src/cvsrc.c
+ 
+   o  Branches should be listed in Subject lines
+ 
+   o  Modules should be allowed to be arbitrary paths and not
+      just top-level directories. This should be easy to add for
+      version 1.1 by adjusting the access control routine.
+ 
+   o  Shiela perhaps should read in shiela.msg in order to know
+      what to kick out when compressing the message. 
+ 
+   For version 1.1:
+   ----------------
+ 
+   o  Under MIME mails, the details could include complete files
+      really as is without the need to uuencode them first.
+ 
+   o  Perhaps replace do_file() mit an IO::File based class?
+      But keep always in mind \n characters when coming in and going out.
+ 
+   o  Support for code freeze time (ranges) and automatic pre-time
+      messages and MOTDs for reminder under cvs commit, cvs admin and cvs
+      import actions.
+      Idea: Req "Approved by:" *:core;
+ 
+   o  Support for "Review-Than-Commit" style development.
+      Idea: Req "Reviewed by:" *:devel;
+ 
+   o  Be more relaxed and support case insensitive config file
+      parsing to be less restrictive to the user when it comes
+      to keywords.
+ 
+   o  Support per-directory .shielarc[,v] files in the
+      repository which act similar to the CVS watch facility and can forward
+      the logging messages to particular people in addition to the standard
+      logging as configured by shiela.cfg. So a .shielarc file with "Log
+      mod_foo.c mail:rse@engelschall.com" would send an extra email to
+      rse@engelschall when mod_foo.c was modified.  So, actually a "Log"
+      command in .shielarc should act identically to a "Log" command in
+      shiela.cfg.
+      


ossp-pkg/shiela/VERSION -> 1.1.1.1

*** /dev/null    Mon Apr 29 05:37:11 2024
--- -    Mon Apr 29 05:41:51 2024
***************
*** 0 ****
--- 1,3 ----
+ 
+   This is OSSP Shiela, Version 0.9.0 (18-Jun-2000)
+ 


ossp-pkg/shiela/configure.in -> 1.1.1.1

*** /dev/null    Mon Apr 29 05:37:11 2024
--- -    Mon Apr 29 05:41:51 2024
***************
*** 0 ****
--- 1,24 ----
+ 
+ AC_INIT(README)
+ 
+ AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)
+ V=`./shtool version -ltxt -dlong VERSION`
+ ./shtool echo -e "Configuring %BOSSP Shiela%b, Version %B${V}%b"
+ echo "Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>"
+ echo ""
+ AC_DIVERT_POP()
+ 
+ AC_MSG_CHECKING(for Perl program)
+ PATH_PERL=`./shtool path -m perl5 perl`
+ AC_SUBST(PATH_PERL)
+ AC_MSG_RESULT($PATH_PERL)
+ 
+ AC_MSG_CHECKING(for CVS program)
+ PATH_CVS=`./shtool path cvs`
+ AC_SUBST(PATH_CVS)
+ AC_MSG_RESULT($PATH_CVS)
+ 
+ AC_SET_MAKE
+ 
+ AC_OUTPUT(Makefile)
+ 


ossp-pkg/shiela/shiela-install.pod -> 1.1.1.1

*** /dev/null    Mon Apr 29 05:37:11 2024
--- -    Mon Apr 29 05:41:51 2024
***************
*** 0 ****
--- 1,151 ----
+ ##
+ ##  Shiela - CVS Access Control and Logging Facility
+ ##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
+ ##
+ ##  This file is part of Shiela, an access control and logging
+ ##  facility for Concurrent Versions System (CVS) repositories 
+ ##  which can be found at http://www.ossp.org/pkg/shiela/.
+ ##
+ ##  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.0 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 file; if not, write to the Free Software
+ ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
+ ##
+ ##  shiela-install.pod: Shiela install manual page (syntax: POD)
+ ##
+ 
+ =pod 
+ 
+ =head1 NAME
+ 
+ B<shiela-install> - Shiela installation utility
+ 
+ =head1 VERSION
+ 
+ B<OSSP Shiela> 0.9.0 (18-Jun-2000)
+ 
+ =head1 DESCRIPTION
+ 
+ B<Shiela> is an access control and logging facility for use with
+ the I<Concurrent Versions System> (CVS). Read shiela(1) for more
+ details about B<Shiela> itself. This B<shiela-install> program is a
+ small utility intended to help in adding B<Shiela> to an existing CVS
+ repository for testing or production purposes.
+ 
+ =head1 INSTALLATION: MANUALLY
+ 
+ B<Shiela> can be installed and activated in a CVS repository either
+ manually or via the B<shiela-install> program. The manual steps would
+ be:
+ 
+ =over 4
+ 
+ =item B<1.>
+ 
+ checkout a working copy of the C<CVSROOT> module from your repository.
+ 
+ =item B<2.>
+ 
+ create the files C<$CVSROOT/CVSROOT/shiela>,
+ C<$CVSROOT/CVSROOT/shiela.cfg> and C<$CVSROOT/CVSROOT/shiela.msg>
+ in this directory and list these three files in
+ C<$CVSROOT/CVSROOT/checkoutlist> (so CVS automatically checks them
+ out).
+ 
+ =item B<3.>
+ 
+ add to C<$CVSROOT/CVSROOT/rcsinfo> (the hook for providing log
+ messages): ``C<ALL $CVSROOT/CVSROOT/shiela.msg>''.
+ 
+ =item B<4.>
+ 
+ add to C<$CVSROOT/CVSROOT/taginfo> (the hook for checking tag
+ operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=taginfo>''.
+ 
+ =item B<5.>
+ 
+ add to C<$CVSROOT/CVSROOT/importinfo> (the hook for checking import
+ operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=importinfo>''. This
+ assumes that you are using the OSSP CVS version. If you use a stock CVS
+ version, you have to skip this step and live with the fact that `C<cvs
+ import>' commands cannot be access controlled by B<Shiela> (because then
+ this hook does not exists at all).
+ 
+ =item B<6.>
+ 
+ add to C<$CVSROOT/CVSROOT/admininfo> (the hook for checking admin
+ operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=admininfo>''. This
+ requires that you are using the OSSP CVS version. If you use a stock CVS
+ version, you have to skip this step and life with the fact that `C<cvs
+ admin>' commands cannot be access controlled by B<Shiela> (because then
+ this hook does not exists at all).
+ 
+ =item B<7.>
+ 
+ add to C<$CVSROOT/CVSROOT/commitinfo> (the hool for checking commit
+ operations): ``C<ALL $CVSROOT/CVSROOT/shiela --hook=commitinfo>''.
+ 
+ =item B<8.>
+ 
+ add to C<$CVSROOT/CVSROOT/verifymsg> (the hook for post-processing log
+ messages): ``C<DEFAULT $CVSROOT/CVSROOT/shiela --hook=verifymsg>''.
+ 
+ =item B<9.>
+ 
+ add to C<$CVSROOT/CVSROOT/loginfo> (the hook for performing logging):
+ ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVvto}>''. This
+ requires that you use the OSSP CVS version. If you use a stock CVS
+ version, use ``C<ALL $CVSROOT/CVSROOT/shiela --hook=loginfo %{sVv}>''
+ instead and live with the fact that B<Shiela>'s run-time efficiency is
+ slightly decreased and branch recognition might be less correct (because
+ B<Shiela> has to determine details the hard way which CVS already would
+ know easily).
+ 
+ =item B<10.>
+ 
+ edit C<$CVSROOT/CVSROOT/shiela.cfg> to fit your repository and
+ project situation. For details, see the description below under
+ B<CONFIGURATION>.
+ 
+ =item B<11.>
+ 
+ finally commit all modifications at once.
+ 
+ =back
+ 
+ =head1 INSTALLATION: AUTOMATICALLY
+ 
+ For convinience reasons one can alternatively use the interactive
+ B<shiela-install> utility, which perform the above steps automatically
+ and especially creates initial C<shiela.cfg> and C<shiela.msg> files.
+ Just run C<shiela-install> and answer the questions. 
+ 
+ For convinience reasons (while testing) one can also override the
+ default value of a question by using C<variable=value> on the
+ B<shiela-install> command line. For instance, ``C<shiela-install
+ repos_path=/tmp/cvs>'' sets the default path for the question about the
+ CVS repository to C</tmp/cvs>. Additionally one can specify C<batch=yes>
+ which runs B<shiela-install> non-interactively.
+ 
+ =head1 SEE ALSO
+ 
+ shiela(1).
+ 
+ =head1 AUTHOR
+ 
+  Ralf S. Engelschall
+  rse@engelschall.com
+  www.engelschall.com
+ 
+ =cut
+ 


ossp-pkg/shiela/shtool -> 1.1.1.1

*** /dev/null    Mon Apr 29 05:37:11 2024
--- -    Mon Apr 29 05:41:51 2024
***************
*** 0 ****
--- 1,1442 ----
+ #!/bin/sh
+ ##
+ ##  GNU shtool -- The GNU Portable Shell Tool
+ ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
+ ##
+ ##  See http://www.gnu.org/software/shtool/ for more information.
+ ##  See ftp://ftp.gnu.org/gnu/shtool/ for latest version.
+ ##
+ ##  Version:  1.4.10 (18-Jun-2000)
+ ##  Contents: 7/17 available modules
+ ##
+ 
+ ##
+ ##  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, or contact Ralf S. Engelschall <rse@engelschall.com>.
+ ##
+ ##  Notice: Given that you include this file verbatim into your own
+ ##  source tree, you are justified in saying that it remains separate
+ ##  from your package, and that this way you are simply just using GNU
+ ##  shtool. So, in this situation, there is no requirement that your
+ ##  package itself is licensed under the GNU General Public License in
+ ##  order to take advantage of GNU shtool.
+ ##
+ 
+ ##
+ ##  Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]
+ ##
+ ##  Available commands:
+ ##    echo       Print string with optional construct expansion
+ ##    install    Install a program, script or datafile
+ ##    mkdir      Make one or more directories
+ ##    fixperm    Fix file permissions inside a source tree
+ ##    tarball    Roll distribution tarballs
+ ##    version    Generate and maintain a version information file
+ ##    path       Deal with program paths
+ ##
+ ##  Not available commands (because module was not built-in):
+ ##    mdate      Pretty-print modification time of a file or dir
+ ##    table      Pretty-print a field-separated list as a table
+ ##    prop       Display progress with a running propeller
+ ##    move       Move files with simultaneous substitution
+ ##    mkln       Make link with calculation of relative paths
+ ##    mkshadow   Make a shadow tree through symbolic links
+ ##    guessos    Simple operating system guesser
+ ##    arx        Extended archive command
+ ##    slo        Separate linker options by library class
+ ##    scpp       Sharing C Pre-Processor
+ ##
+ 
+ if [ $# -eq 0 ]; then
+     echo "$0:Error: invalid command line" 1>&2
+     echo "$0:Hint:  run \`$0 -h' for usage" 1>&2
+     exit 1
+ fi
+ if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then
+     echo "This is GNU shtool, version 1.4.10 (18-Jun-2000)"
+     echo "Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>"
+     echo "Report bugs to <bug-shtool@gnu.org>"
+     echo ''
+     echo "Usage: shtool [<options>] [<cmd-name> [<cmd-options>] [<cmd-args>]]" 
+     echo ''
+     echo 'Available global <options>:'
+     echo '  -v, --version   display shtool version information'
+     echo '  -h, --help      display shtool usage help page (this one)'
+     echo '  -d, --debug     display shell trace information'
+     echo ''
+     echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'
+     echo '  echo     [-n] [-e] [<str> ...]'
+     echo '  install  [-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>]'
+     echo '           [-e<ext>] <file> [<file> ...] <path>'
+     echo '  mkdir    [-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]'
+     echo '  fixperm  [-v] [-t] <path> [<path> ...]'
+     echo '  tarball  [-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u'
+     echo '           <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]'
+     echo '  version  [-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>]'
+     echo '           [-d<type>] <file>'
+     echo '  path     [-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]'
+     echo ''
+     echo 'Not available <cmd-name> (because module was not built-in):'
+     echo '  mdate    [-n] [-z] [-s] [-d] [-f<str>] [-o<spec>] <path>'
+     echo '  table    [-F<sep>] [-w<width>] [-c<cols>] [-s<strip>] <str><sep><str>...'
+     echo '  prop     [-p<str>]'
+     echo '  move     [-v] [-t] [-e] [-p] <src-file> <dst-file>'
+     echo '  mkln     [-t] [-f] [-s] <src-path> [<src-path> ...] <dst-path>'
+     echo '  mkshadow [-v] [-t] [-a] <src-dir> <dst-dir>'
+     echo '  guessos  '
+     echo '  arx      [-t] [-C<cmd>] <op> <archive> [<file> ...]'
+     echo '  slo      [-p<str>] -- -L<dir> -l<lib> [-L<dir> -l<lib> ...]'
+     echo '  scpp     [-v] [-p] [-f<filter>] [-o<ofile>] [-t<tfile>] [-M<mark>]'
+     echo '           [-D<dname>] [-C<cname>] <file> [<file> ...]'
+     echo ''
+     exit 0
+ fi
+ if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then
+     echo "GNU shtool 1.4.10 (18-Jun-2000)"
+     exit 0
+ fi
+ if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then
+     shift
+     set -x
+ fi
+ name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'`
+ case "$name" in
+     echo|install|mkdir|fixperm|tarball|version|path )
+         #   implicit tool command selection
+         tool="$name"
+         ;;
+     * )
+         #   explicit tool command selection
+         tool="$1"
+         shift
+         ;;
+ esac
+ arg_spec=""
+ opt_spec=""
+ gen_tmpfile=no
+ 
+ ##
+ ##  DISPATCH INTO SCRIPT PROLOG
+ ##
+ 
+ case $tool in
+     echo )
+         str_tool="echo"
+         str_usage="[-n] [-e] [<str> ...]"
+         arg_spec="0+"
+         opt_spec="n.e."
+         opt_n=no
+         opt_e=no
+         ;;
+     install )
+         str_tool="install"
+         str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
+         arg_spec="2+"
+         opt_spec="v.t.c.C.s.m:o:g:e:"
+         opt_v=no
+         opt_t=no
+         opt_c=no
+         opt_C=no
+         opt_s=no
+         opt_m=""
+         opt_o=""
+         opt_g=""
+         opt_e=""
+         ;;
+     mkdir )
+         str_tool="mkdir"
+         str_usage="[-t] [-f] [-p] [-m<mode>] <dir> [<dir> ...]"
+         arg_spec="1+"
+         opt_spec="t.f.p.m:"
+         opt_t=no
+         opt_f=no
+         opt_p=no
+         opt_m=""
+         ;;
+     fixperm )
+         str_tool="fixperm"
+         str_usage="[-v] [-t] <path> [<path> ...]"
+         arg_spec="1+"
+         opt_spec="v.t."
+         opt_v=no
+         opt_t=no
+         ;;
+     tarball )
+         str_tool="tarball"
+         str_usage="[-t] [-v] [-o <tarball>] [-c <prog>] [-d <dir>] [-u <user>] [-g <group>] [-e <pattern>] <path> [<path> ...]"
+         gen_tmpfile=yes
+         arg_spec="1+"
+         opt_spec="t.v.o:c:d:u:g:e:"
+         opt_t=no
+         opt_v=no
+         opt_o=""
+         opt_c=""
+         opt_d=""
+         opt_u=""
+         opt_g=""
+         opt_e="CVS,\\.cvsignore,\\.[oa]\$"
+         ;;
+     version )
+         str_tool="version"
+         str_usage="[-l<lang>] [-n<name>] [-p<prefix>] [-s<version>] [-i<knob>] [-d<type>] <file>"
+         arg_spec="1+"
+         opt_spec="l:n:p:s:i:d:"
+         opt_l="txt"
+         opt_n="unknown"
+         opt_p="unknown"
+         opt_s="unknown"
+         opt_i="P"
+         opt_d="NO"
+         gen_tmpfile=yes
+         ;;
+     path )
+         str_tool="path"
+         str_usage="[-s] [-r] [-d] [-b] [-m] [-p<path>] <str> [<str> ...]"
+         gen_tmpfile=yes
+         arg_spec="1+"
+         opt_spec="s.r.d.b.m.p:"
+         opt_s=no
+         opt_r=no
+         opt_d=no
+         opt_b=no
+         opt_m=no
+         opt_p="$PATH"
+         ;;
+     -* )
+         echo "$0:Error: unknown option \`$tool'" 2>&1
+         echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
+         exit 1
+         ;;
+     * )
+         echo "$0:Error: unknown command \`$tool'" 2>&1
+         echo "$0:Hint:  run \`$0 -h' for usage" 2>&1
+         exit 1
+         ;;
+ esac
+ 
+ ##
+ ##  COMMON UTILITY CODE
+ ##
+ 
+ #   determine name of tool
+ if [ ".$tool" != . ]; then
+     #   used inside shtool script
+     toolcmd="$0 $tool"
+     toolcmdhelp="shtool $tool"
+     msgprefix="shtool:$tool"
+ else
+     #   used as standalone script
+     toolcmd="$0"
+     toolcmdhelp="sh $0"
+     msgprefix="$str_tool"
+ fi
+ 
+ #   parse argument specification string
+ eval `echo $arg_spec |\
+       sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'`
+ 
+ #   parse option specification string
+ eval `echo h.$opt_spec |\
+       sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'`
+ 
+ #   interate over argument line
+ opt_PREV=''
+ while [ $# -gt 0 ]; do
+     #   special option stops processing
+     if [ ".$1" = ".--" ]; then
+         shift
+         break
+     fi
+ 
+     #   determine option and argument
+     opt_ARG_OK=no
+     if [ ".$opt_PREV" != . ]; then
+         #   merge previous seen option with argument
+         opt_OPT="$opt_PREV"
+         opt_ARG="$1"
+         opt_ARG_OK=yes
+         opt_PREV=''
+     else
+         #   split argument into option and argument
+         case "$1" in
+             -[a-zA-Z0-9]*)
+                 eval `echo "x$1" |\
+                       sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \
+                           -e 's/";\(.*\)$/"; opt_ARG="\1"/'`
+                 ;;
+             -[a-zA-Z0-9])
+                 opt_OPT=`echo "x$1" | cut -c3-`
+                 opt_ARG=''
+                 ;;
+             *)
+                 break
+                 ;;
+         esac
+     fi
+ 
+     #   eat up option
+     shift
+ 
+     #   determine whether option needs an argument
+     eval "opt_MODE=\$opt_MODE_${opt_OPT}"
+     if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then
+         if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then
+             opt_PREV="$opt_OPT"
+             continue
+         fi
+     fi
+ 
+     #   process option
+     case $opt_MODE in
+         '.' )
+             #   boolean option
+             eval "opt_${opt_OPT}=yes"
+             ;;
+         ':' )
+             #   option with argument (multiple occurances override)
+             eval "opt_${opt_OPT}=\"\$opt_ARG\""
+             ;;
+         '+' )
+             #   option with argument (multiple occurances append)
+             eval "opt_${opt_OPT}=\"\$opt_${opt_OPT} \$opt_ARG\""
+             ;;
+         * )
+             echo "$msgprefix:Error: unknown option: \`-$opt_OPT'" 1>&2
+             echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
+             exit 1
+             ;;
+     esac
+ done
+ if [ ".$opt_PREV" != . ]; then
+     echo "$msgprefix:Error: missing argument to option \`-$opt_PREV'" 1>&2
+     echo "$msgprefix:Hint:  run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2
+     exit 1
+ fi
+ 
+ #   process help option
+ if [ ".$opt_h" = .yes ]; then
+     echo "Usage: $toolcmdhelp $str_usage"
+     exit 0
+ fi
+ 
+ #   complain about incorrect number of arguments
+ case $arg_MODE in
+     '=' )
+         if [ $# -ne $arg_NUMS ]; then
+             echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2
+             echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
+             exit 1
+         fi
+         ;;
+     '+' )
+         if [ $# -lt $arg_NUMS ]; then
+             echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2
+             echo "$msgprefix:Hint:  run \`$toolcmd -h' or \`man shtool' for details" 1>&2
+             exit 1
+         fi
+         ;;
+ esac
+ 
+ #   establish a temporary file on request
+ if [ ".$gen_tmpfile" = .yes ]; then
+     if [ ".$TMPDIR" != . ]; then
+         tmpdir="$TMPDIR"
+     elif [ ".$TEMPDIR" != . ]; then
+         tmpdir="$TEMPDIR"
+     else
+         tmpdir="/tmp"
+     fi
+     tmpfile="$tmpdir/.shtool.$$"
+     rm -f $tmpfile >/dev/null 2>&1
+     touch $tmpfile
+ fi
+ 
+ ##
+ ##  DISPATCH INTO SCRIPT BODY
+ ##
+ 
+ case $tool in
+ 
+ echo )
+     ##
+     ##  echo -- Print string with optional construct expansion
+     ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
+     ##  Originally written for WML as buildinfo
+     ##
+     
+     text="$*"
+     
+     #   check for broken escape sequence expansion
+     seo=''
+     bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'`
+     if [ ".$bytes" != .3 ]; then
+         bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
+         if [ ".$bytes" = .3 ]; then
+             seo='-E'
+         fi
+     fi
+     
+     #   check for existing -n option (to suppress newline)
+     minusn=''
+     bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'`
+     if [ ".$bytes" = .3 ]; then
+         minusn='-n'
+     fi
+     
+     #   determine terminal bold sequence
+     term_bold='' 
+     term_norm=''
+     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then
+         case $TERM in
+             #   for the most important terminal types we directly know the sequences
+             xterm|xterm*|vt220|vt220*)
+                 term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
+                 term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
+                 ;;
+             vt100|vt100*)
+                 term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
+                 term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
+                 ;;
+             #   for all others, we try to use a possibly existing `tput' or `tcout' utility
+             * )
+                 paths=`echo $PATH | sed -e 's/:/ /g'`
+                 for tool in tput tcout; do
+                     for dir in $paths; do
+                         if [ -r "$dir/$tool" ]; then
+                             for seq in bold md smso; do # 'smso' is last
+                                 bold="`$dir/$tool $seq 2>/dev/null`"
+                                 if [ ".$bold" != . ]; then
+                                     term_bold="$bold"
+                                     break
+                                 fi
+                             done
+                             if [ ".$term_bold" != . ]; then
+                                 for seq in sgr0 me rmso reset; do # 'reset' is last
+                                     norm="`$dir/$tool $seq 2>/dev/null`"
+                                     if [ ".$norm" != . ]; then
+                                         term_norm="$norm"
+                                         break
+                                     fi
+                                 done
+                             fi
+                             break
+                         fi
+                     done
+                     if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
+                         break;
+                     fi
+                 done
+                 ;;
+         esac
+         if [ ".$term_bold" = . -o ".$term_norm" = . ]; then
+             echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2
+         fi
+     fi
+     
+     #   determine user name
+     username=''
+     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then
+         username="$LOGNAME"
+         if [ ".$username" = . ]; then
+             username="$USER"
+             if [ ".$username" = . ]; then
+                 username="`(whoami) 2>/dev/null |\
+                            awk '{ printf("%s", $1); }'`"
+                 if [ ".$username" = . ]; then
+                     username="`(who am i) 2>/dev/null |\
+                                awk '{ printf("%s", $1); }'`"
+                     if [ ".$username" = . ]; then
+                         username='unknown'
+                     fi
+                 fi
+             fi
+         fi
+     fi
+     
+     #   determine user id
+     userid=''
+     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then
+         userid="`(id -u) 2>/dev/null`"
+         if [ ".$userid" = . ]; then
+             str="`(id) 2>/dev/null`"
+             if [ ".`echo $str | grep '^uid[    ]*=[    ]*[0-9]*('`" != . ]; then
+                 userid=`echo $str | sed -e 's/^uid[    ]*=[    ]*//' -e 's/(.*//'`
+             fi
+             if [ ".$userid" = . ]; then
+                 userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \
+                         sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
+                 if [ ".$userid" = . ]; then
+                     userid=`(ypcat passwd) 2>/dev/null |
+                             egrep "^${username}:" | \
+                             sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'`
+                     if [ ".$userid" = . ]; then
+                         userid='?'
+                     fi
+                 fi
+             fi
+         fi
+     fi
+     
+     #   determine host name
+     hostname=''
+     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then
+         hostname="`(uname -n) 2>/dev/null |\
+                    awk '{ printf("%s", $1); }'`"
+         if [ ".$hostname" = . ]; then
+             hostname="`(hostname) 2>/dev/null |\
+                        awk '{ printf("%s", $1); }'`"
+             if [ ".$hostname" = . ]; then
+                 hostname='unknown'
+             fi
+         fi
+         case $hostname in
+             *.* )
+                 domainname=".`echo $hostname | cut -d. -f2-`"
+                 hostname="`echo $hostname | cut -d. -f1`"
+                 ;;
+         esac
+     fi
+     
+     #   determine domain name
+     domainname=''
+     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then
+         if [ ".$domainname" = . ]; then
+             if [ -f /etc/resolv.conf ]; then
+                 domainname="`egrep '^[         ]*domain' /etc/resolv.conf | head -1 |\
+                              sed -e 's/.*domain//' \
+                                  -e 's/^[      ]*//' -e 's/^ *//' -e 's/^      *//' \
+                                  -e 's/^\.//' -e 's/^/./' |\
+                              awk '{ printf("%s", $1); }'`"
+                 if [ ".$domainname" = . ]; then
+                     domainname="`egrep '^[     ]*search' /etc/resolv.conf | head -1 |\
+                                  sed -e 's/.*search//' \
+                                      -e 's/^[  ]*//' -e 's/^ *//' -e 's/^      *//' \
+                                      -e 's/ .*//' -e 's/       .*//' \
+                                      -e 's/^\.//' -e 's/^/./' |\
+                                  awk '{ printf("%s", $1); }'`"
+                 fi
+             fi
+         fi
+     fi
+     
+     #   determine current time
+     time_day=''
+     time_month=''
+     time_year=''
+     time_monthname=''
+     if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then
+         time_day=`date '+%d'`
+         time_month=`date '+%m'`
+         time_year=`date '+%Y' 2>/dev/null`
+         if [ ".$time_year" = . ]; then
+             time_year=`date '+%y'`
+             case $time_year in
+                 [5-9][0-9]) time_year="19$time_year" ;;
+                 [0-4][0-9]) time_year="20$time_year" ;;
+             esac
+         fi
+         case $time_month in
+             1|01) time_monthname='Jan' ;;
+             2|02) time_monthname='Feb' ;;
+             3|03) time_monthname='Mar' ;;
+             4|04) time_monthname='Apr' ;;
+             5|05) time_monthname='May' ;;
+             6|06) time_monthname='Jun' ;;
+             7|07) time_monthname='Jul' ;;
+             8|08) time_monthname='Aug' ;;
+             9|09) time_monthname='Sep' ;;
+               10) time_monthname='Oct' ;;
+               11) time_monthname='Nov' ;;
+               12) time_monthname='Dec' ;;
+         esac
+     fi
+     
+     #   expand special ``%x'' constructs
+     if [ ".$opt_e" = .yes ]; then
+         text=`echo $seo "$text" |\
+               sed -e "s/%B/${term_bold}/g" \
+                   -e "s/%b/${term_norm}/g" \
+                   -e "s/%u/${username}/g" \
+                   -e "s/%U/${userid}/g" \
+                   -e "s/%h/${hostname}/g" \
+                   -e "s/%d/${domainname}/g" \
+                   -e "s/%D/${time_day}/g" \
+                   -e "s/%M/${time_month}/g" \
+                   -e "s/%Y/${time_year}/g" \
+                   -e "s/%m/${time_monthname}/g" 2>/dev/null`
+     fi
+     
+     #   create output
+     if [ .$opt_n = .no ]; then
+         echo $seo "$text"
+     else
+         #   the harder part: echo -n is best, because
+         #   awk may complain about some \xx sequences.
+         if [ ".$minusn" != . ]; then
+             echo $seo $minusn "$text"
+         else
+             echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
+         fi
+     fi
+     ;;
+ 
+ install )
+     ##
+     ##  install -- Install a program, script or datafile
+     ##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
+     ##  Originally written for shtool
+     ##
+     
+     #   determine source(s) and destination 
+     argc=$#
+     srcs=""
+     while [ $# -gt 1 ]; do
+         srcs="$srcs $1"
+         shift
+     done
+     dstpath="$1"
+     
+     #   type check for destination
+     dstisdir=0
+     if [ -d $dstpath ]; then
+         dstpath=`echo "$dstpath" | sed -e 's:/$::'`
+         dstisdir=1
+     fi
+     
+     #   consistency check for destination
+     if [ $argc -gt 2 -a $dstisdir = 0 ]; then
+         echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
+         exit 1
+     fi
+     
+     #   iterate over all source(s)
+     for src in $srcs; do
+         dst=$dstpath
+     
+         #  If destination is a directory, append the input filename
+         if [ $dstisdir = 1 ]; then
+             dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
+             dst="$dst/$dstfile"
+         fi
+     
+         #  Add a possible extension to src and dst
+         if [ ".$opt_e" != . ]; then
+             src="$src$opt_e"
+             dst="$dst$opt_e"
+         fi
+     
+         #  Check for correct arguments
+         if [ ".$src" = ".$dst" ]; then
+             echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
+             continue
+         fi
+         if [ -d "$src" ]; then
+             echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
+             continue
+         fi
+     
+         #  Make a temp file name in the destination directory
+         dsttmp=`echo $dst |\
+                 sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
+                     -e "s;\$;/#INST@$$#;"`
+     
+         #  Verbosity
+         if [ ".$opt_v" = .yes ]; then
+             echo "$src -> $dst" 1>&2
+         fi
+     
+         #  Copy or move the file name to the temp name
+         #  (because we might be not allowed to change the source)
+         if [ ".$opt_C" = .yes ]; then
+             opt_c=yes
+         fi
+         if [ ".$opt_c" = .yes ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "cp $src $dsttmp" 1>&2
+             fi
+             cp $src $dsttmp || exit $?
+         else
+             if [ ".$opt_t" = .yes ]; then
+                 echo "mv $src $dsttmp" 1>&2
+             fi
+             mv $src $dsttmp || exit $?
+         fi
+     
+         #  Adjust the target file
+         #  (we do chmod last to preserve setuid bits)
+         if [ ".$opt_s" = .yes ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "strip $dsttmp" 1>&2
+             fi
+             strip $dsttmp || exit $?
+         fi
+         if [ ".$opt_o" != . ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "chown $opt_o $dsttmp" 1>&2
+             fi
+             chown $opt_o $dsttmp || exit $?
+         fi
+         if [ ".$opt_g" != . ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "chgrp $opt_g $dsttmp" 1>&2
+             fi
+             chgrp $opt_g $dsttmp || exit $?
+         fi
+         if [ ".$opt_m" != . ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "chmod $opt_m $dsttmp" 1>&2
+             fi
+             chmod $opt_m $dsttmp || exit $?
+         fi
+     
+         #   Determine whether to do a quick install
+         #   (has to be done _after_ the strip was already done)
+         quick=no
+         if [ ".$opt_C" = .yes ]; then
+             if [ -r $dst ]; then
+                 if cmp -s $src $dst; then
+                     quick=yes
+                 fi
+             fi
+         fi
+     
+         #   Finally install the file to the real destination
+         if [ $quick = yes ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "rm -f $dsttmp" 1>&2
+             fi
+             rm -f $dsttmp
+         else
+             if [ ".$opt_t" = .yes ]; then
+                 echo "rm -f $dst && mv $dsttmp $dst" 1>&2
+             fi
+             rm -f $dst && mv $dsttmp $dst
+         fi
+     done
+     ;;
+ 
+ mkdir )
+     ##
+     ##  mkdir -- Make one or more directories
+     ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
+     ##  Originally written for public domain by Noah Friedman <friedman@prep.ai.mit.edu>
+     ##  Cleaned up and enhanced for shtool
+     ##
+     
+     errstatus=0
+     for p in ${1+"$@"}; do
+         #   if the directory already exists...
+         if [ -d "$p" ]; then
+             if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
+                 echo "$msgprefix:Error: directory already exists: $p" 1>&2
+                 errstatus=1
+                 break
+             else
+                 continue
+             fi
+         fi
+         #   if the directory has to be created...
+         if [ ".$opt_p" = .no ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "mkdir $p" 1>&2
+             fi
+             mkdir $p || errstatus=$?
+         else
+             #   the smart situation
+             set fnord `echo ":$p" |\
+                        sed -e 's/^:\//%/' \
+                            -e 's/^://' \
+                            -e 's/\// /g' \
+                            -e 's/^%/\//'`
+             shift
+             pathcomp=''
+             for d in ${1+"$@"}; do
+                 pathcomp="$pathcomp$d"
+                 case "$pathcomp" in
+                     -* ) pathcomp="./$pathcomp" ;;
+                 esac
+                 if [ ! -d "$pathcomp" ]; then
+                     if [ ".$opt_t" = .yes ]; then
+                         echo "mkdir $pathcomp" 1>&2
+                     fi
+                     mkdir $pathcomp || errstatus=$?
+                     if [ ".$opt_m" != . ]; then
+                         if [ ".$opt_t" = .yes ]; then
+                             echo "chmod $opt_m $pathcomp" 1>&2
+                         fi
+                         chmod $opt_m $pathcomp || errstatus=$?
+                     fi
+                 fi
+                 pathcomp="$pathcomp/"
+             done
+         fi
+     done
+     exit $errstatus
+     ;;
+ 
+ fixperm )
+     ##
+     ##  fixperm -- Fix file permissions inside a source tree
+     ##  Copyright (c) 1996-2000 Ralf S. Engelschall <rse@engelschall.com>
+     ##  Originally written for ePerl
+     ##
+     
+     paths="$*"
+     
+     #   check whether the test command supports the -x option
+     if [ -x /bin/sh ] 2>/dev/null; then
+         minusx="-x"
+     else
+         minusx="-r"
+     fi
+     
+     #   iterate over paths
+     for p in $paths; do
+         for file in `find $p -depth -print`; do
+             if [ -f $file ]; then
+                 if [ $minusx $file ]; then
+                     if [ ".$opt_v" = .yes ]; then
+                         echo "-rwxrwxr-x $file" 2>&1
+                     fi
+                     if [ ".$opt_t" = .yes ]; then
+                         echo "chmod 775 $file" 2>&1
+                     fi
+                     chmod 775 $file
+                 else
+                     if [ ".$opt_v" = .yes ]; then
+                         echo "-rw-rw-r-- $file" 2>&1
+                     fi
+                     if [ ".$opt_t" = .yes ]; then
+                         echo "chmod 664 $file" 2>&1
+                     fi
+                     chmod 664 $file
+                 fi
+                 continue
+             fi
+             if [ -d $file ]; then
+                 if [ ".$opt_v" = .yes ]; then
+                     echo "drwxrwxr-x $file" 2>&1
+                 fi
+                 if [ ".$opt_t" = .yes ]; then
+                     echo "chmod 775 $file" 2>&1
+                 fi
+                 chmod 775 $file
+                 continue
+             fi
+             if [ ".$opt_v" = .yes ]; then
+                 echo "?????????? $file" 2>&1
+             fi
+         done
+     done
+     ;;
+ 
+ tarball )
+     ##
+     ##  tarball -- Roll distribution tarballs
+     ##  Copyright (c) 1999-2000 Ralf S. Engelschall <rse@engelschall.com>
+     ##  Originally written for shtool
+     ##
+     
+     srcs="$*"
+     
+     #   check whether the test command supports the -x option
+     if [ -x /bin/sh ] 2>/dev/null; then
+         minusx="-x"
+     else
+         minusx="-r"
+     fi
+     
+     #   find the tools
+     paths="`echo $PATH |\
+             sed -e 's%/*:%:%g' -e 's%/*$%%' \
+                 -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' \
+                 -e 's/:/ /g'`"
+     for spec in find:gfind,find tar:gtar,tar tardy:tardy,tarcust; do
+         prg=`echo $spec | sed -e 's/:.*$//'`
+         tools=`echo $spec | sed -e 's/^.*://'`
+         eval "prg_${prg}=''"
+         #   iterate over tools
+         for tool in `echo $tools | sed -e 's/,/ /g'`; do
+             #   iterate over paths
+             for path in $paths; do
+                 if [ $minusx "$path/$tool" ] && [ ! -d "$path/$tool" ]; then
+                     eval "prg_${prg}=\"$path/$tool\""
+                     break
+                 fi
+             done
+             eval "val=\$prg_${prg}"
+             if [ ".$val" != . ]; then
+                 break
+             fi
+         done
+     done
+     
+     #   expand source paths
+     exclude=''
+     for pat in `echo $opt_e | sed 's/,/ /g'`; do
+         exclude="$exclude | grep -v '$pat'"
+     done
+     if [ ".$opt_t" = .yes ]; then
+         echo "cp /dev/null $tmpfile.lst" 1>&2
+     fi
+     cp /dev/null $tmpfile.lst
+     for src in $srcs; do
+         if [ -d $src ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "(cd $src && $prg_find . -type f -depth -print) | sed -e 's:^\\.\$::' -e 's:^\\./::' | cat $exclude >>$tmpfile.lst" 1>&2
+             fi
+             (cd $src && find . -type f -depth -print) |\
+             sed -e 's:^\.$::' -e 's:^\./::' | eval cat $exclude >>$tmpfile.lst
+         else
+             if [ ".$opt_t" = .yes ]; then
+                 echo "echo $src >>$tmpfile.lst" 1>&2
+             fi
+             echo $src >>$tmpfile.lst
+         fi
+     done
+     sort <$tmpfile.lst >$tmpfile.lst.n
+     mv $tmpfile.lst.n $tmpfile.lst
+     if [ ".$opt_v" = .yes ]; then
+         cat $tmpfile.lst | sed -e 's/^/  /' 1>&2
+     fi
+     
+     #   determine tarball file and directory name
+     if [ ".$opt_o" != . ]; then
+         tarfile="$opt_o"
+         if [ ".$opt_d" != . ]; then
+             tarname="$opt_d"
+         else
+             tarname=`echo $tarfile | sed -e 's/\.tar.*$//' -e 's;.*/\([^/]*\)$;\1;'`
+         fi
+     else
+         if [ ".$opt_d" != . ]; then
+             tarname="$opt_d"
+         elif [ -d "$from" ]; then
+             tarname=`echo $from | sed -e 's;.*/\([^/]*\)$;\1;'`
+         else
+             tarname="out"
+         fi
+         tarfile="$tarname.tar"
+     fi
+     
+     #   roll the tarball
+     compress=''
+     if [ ".$opt_c" != . ]; then
+         compress="| $opt_c"
+     fi
+     if [ ".$prg_tardy" != . ]; then
+         #   the elegant hackers way
+         tardy_opt="--prefix=$tarname"
+         tardy_opt="$tardy_opt --user_number=0 --group_number=0" # security!
+         if [ ".$opt_u" != . ]; then
+             tardy_opt="$tardy_opt --user_name=$opt_u"
+         fi
+         if [ ".$opt_g" != . ]; then
+             tardy_opt="$tardy_opt --group_name=$opt_g"
+         fi
+         if [ ".$opt_t" = .yes ]; then
+             echo "cat $tmpfile.lst | xargs $prg_tar cf - | $prg_tardy $tardy_opt | cat $compress >$tmpfile.out" 1>&2
+         fi
+         cat $tmpfile.lst |\
+         xargs $prg_tar cf - |\
+         $prg_tardy $tardy_opt |\
+         eval cat $compress >$tmpfile.out
+         if [ ".$opt_t" = .yes ]; then
+             echo "cp $tmpfile.out $tarfile" 1>&2
+         fi
+         cp $tmpfile.out $tarfile
+     else
+         #  the portable standard way
+         if [ ".$opt_t" = .yes ]; then
+             echo "mkdir $tmpdir/$tarname" 1>&2
+         fi
+         mkdir $tmpdir/$tarname || exit 1
+         if [ ".$opt_t" = .yes ]; then
+             echo "cat $tmpfile.lst | xargs $prg_tar cf - | (cd $tmpdir/$tarname && $prg_tar xf -)" 1>&2
+         fi
+         cat $tmpfile.lst |\
+         xargs $prg_tar cf - |\
+         (cd $tmpdir/$tarname && $prg_tar xf -)
+         if [ ".$opt_u" != . ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1" 2>&1
+             fi
+             chown -R $opt_u $tmpdir/$tarname >/dev/null 2>&1 ||\
+             echo "$msgprefix:Warning: cannot set user name \`$opt_u' (would require root priviledges)"
+         fi
+         if [ ".$opt_g" != . ]; then
+             if [ ".$opt_t" = .yes ]; then
+                 echo "chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1" 2>&1
+             fi
+             chgrp -R $opt_g $tmpdir/$tarname >/dev/null 2>&1 ||\
+             echo "$msgprefix:Warning: cannot set group name \`$opt_g' (would require root priviledges)"
+         fi
+         if [ ".$opt_t" = .yes ]; then
+             echo "(cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) | cat $compress >$tmpfile.out" 1>&2
+         fi
+         (cd $tmpdir && $prg_find $tarname -type f -depth -print | sort | xargs $prg_tar cf -) |\
+         eval cat $compress >$tmpfile.out
+         if [ ".$opt_t" = .yes ]; then
+             echo "cp $tmpfile.out $tarfile" 1>&2
+         fi
+         cp $tmpfile.out $tarfile
+         if [ ".$opt_t" = .yes ]; then
+             echo "rm -rf $tmpdir/$tarname" 1>&2
+         fi
+         rm -rf $tmpdir/$tarname
+     fi
+     
+     #   cleanup
+     if [ ".$opt_t" = .yes ]; then
+         echo "rm -f $tmpfile.lst $tmpfile.out" 1>&2
+     fi
+     rm -f $tmpfile.lst $tmpfile.out
+     ;;
+ 
+ version )
+     ##
+     ##  version -- Generate and maintain a version information file
+     ##  Copyright (c) 1994-2000 Ralf S. Engelschall <rse@engelschall.com>
+     ##  Originally written for ePerl
+     ##
+     
+     LANGUAGE="$opt_l"
+     NAME="$opt_n"
+     PREFIX="$opt_p"
+     FULLVERSION="$opt_s"
+     INCREASE="$opt_i"
+     REPORT="$opt_d"
+     FILE="$1"
+     
+     #   determine language
+     if [ ".$LANGUAGE" = .unknown ]; then
+         case $FILE in
+             *.txt )       LANGUAGE=txt    ;;
+             *.c )         LANGUAGE=c      ;;
+             *.pl | *.pm ) LANGUAGE=perl   ;;
+             *.py)         LANGUAGE=python ;;
+             * )           echo "$tool:Error: unknown language type" 1>&2; exit 1 ;;
+         esac
+     fi
+     
+     #   determine prefix from name and vice versa
+     if [ ".$PREFIX" = . -o ".$PREFIX" = .unknown ]; then
+         if [ ".$NAME" != . -a ".$NAME" != .unknown ]; then
+             PREFIX="$NAME"
+         fi
+     fi
+     if [ ".$NAME" = . -o ".$NAME" = .unknown ]; then
+         if [ ".$PREFIX" != . -a ".$PREFIX" != .unknown ]; then
+             NAME="$PREFIX"
+         fi
+     fi
+     
+     #   determine version
+     date=unknown
+     version=0
+     revision=0
+     bplevel=0
+     if [ ".$FULLVERSION" = .unknown ]; then
+         if [ -r "$FILE" ]; then
+             #   grep out current information
+             id=`grep 'Version [0-9]*.[0-9]*[.abps][0-9]* ([0-9]*-[a-zA-Z]*-[0-9]*)' $FILE | \
+                 head -1 | \
+                 sed -e 's%.*Version \([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\) (\([0-9]*-[a-zA-Z]*-[0-9]*\)).*%\1:\2:\3:\4:\5%'`
+             version=`echo $id | awk -F: '{ print $1 }'`
+             revision=`echo $id | awk -F: '{ print $2 }'`
+             bptype=`echo $id | awk -F: '{ print $3 }'`
+             bplevel=`echo $id | awk -F: '{ print $4 }'`
+             date=`echo $id | awk -F: '{ print $5 }'`
+             if [ .$REPORT = .NO ]; then
+                 case $INCREASE in
+                     b ) bplevel=`expr $bplevel + 1`
+                         bptype=b
+                         ;;
+                     a ) bplevel=`expr $bplevel + 1`
+                         bptype=a
+                         ;;
+                     s ) bplevel=`expr $bplevel + 1`
+                         bptype=s
+                         ;;
+                     P ) bplevel=`expr $bplevel + 1`
+                         bptype=.
+                         ;;
+                     p ) bplevel=`expr $bplevel + 1`
+                         bptype=p
+                         ;;
+                     r ) revision=`expr $revision + 1`
+                         bptype=.
+                         bplevel=0
+                         ;;
+                     v ) version=`expr $version + 1`
+                         revision=0
+                         bptype=.
+                         bplevel=0
+                         ;;
+                 esac
+                 date=calc
+             fi
+             FULLVERSION="$version.$revision$bptype$bplevel"
+         else
+             #   intialise to first version
+             version=0
+             revision=5
+             bptype=b
+             bplevel=0
+             date=calc
+         fi
+     else
+         #   take given version
+         V=`echo $FULLVERSION | sed -e 's%\([0-9]*\)\.\([0-9]*\)\([.abps]\)\([0-9]*\).*%\1:\2:\3:\4%'`
+         version=`echo $V | awk -F: '{ print $1 }'`
+         revision=`echo $V | awk -F: '{ print $2 }'`
+         bptype=`echo $V | awk -F: '{ print $3 }'`
+         bplevel=`echo $V | awk -F: '{ print $4 }'`
+         date=calc
+     fi
+     
+     #   determine hex value of version
+     case $FULLVERSION in
+         *.*a* )
+             HEX=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
+                  echo "$FULLVERSION" | sed -e 's/.*a//' | awk '{ printf("0%02d", $1); }'`
+             ;;
+         *.*b* )
+             HEX=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d%02d", $1, $2); }' &&
+                  echo "$FULLVERSION" | sed -e 's/.*b//' | awk '{ printf("1%02d", $1); }'`
+             ;;
+         *.*.* )
+             HEX=`echo "$FULLVERSION" | awk -F. '{ printf("%d%02d2%02d", $1, $2, $3); }'`
+             ;;
+     esac
+     
+     #   determine libtool version
+     case $FULLVERSION in
+         *.*a* )
+             LTV=`echo "$FULLVERSION" | sed -e 's/a.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
+             ;;
+         *.*b* )
+             LTV=`echo "$FULLVERSION" | sed -e 's/b.*//' | awk -F. '{ printf("%d:0", $1*10+$2); }'`
+             ;;
+         *.*.* )
+             LTV=`echo "$FULLVERSION" | awk -F. '{ printf("%d:%d", $1*10+$2, $3); }'`
+             ;;
+     esac
+     
+     #   determine string out of filename
+     #   (don't try to optimize this in any way - portability!)
+     FILESTR=`echo "$FILE" |\
+              tr 'abcdefghijklmnopqrstuvwxyz./%+' \
+                 'ABCDEFGHIJKLMNOPQRSTUVWXYZ____' | sed -e 's/-/_/g'`
+     
+     #   determine date
+     if [ ".$date" = .calc ]; then
+         day=`date '+%d'`
+         month=`date '+%m'`
+         year=`date '+%Y' 2>/dev/null`
+         if [ ".$time_year" = . ]; then
+             year=`date '+%y'`
+             case $year in
+                 [5-9][0-9]) year="19$year" ;;
+                 [0-4][0-9]) year="20$year" ;;
+             esac
+         fi
+         case $month in
+             1|01) month='Jan' ;;
+             2|02) month='Feb' ;;
+             3|03) month='Mar' ;;
+             4|04) month='Apr' ;;
+             5|05) month='May' ;;
+             6|06) month='Jun' ;;
+             7|07) month='Jul' ;;
+             8|08) month='Aug' ;;
+             9|09) month='Sep' ;;
+               10) month='Oct' ;;
+               11) month='Nov' ;;
+               12) month='Dec' ;;
+         esac
+         date="${day}-${month}-${year}"
+     fi
+     
+     if [ .$REPORT != .NO ]; then
+         case $REPORT in
+             long )
+                 echo "$version.$revision$bptype$bplevel ($date)"
+                 ;;
+             short )
+                 echo "$version.$revision$bptype$bplevel"
+                 ;;
+             libtool )
+                 echo "$LTV"
+                 ;;
+             hex )
+                 echo "0x$HEX"
+                 ;;
+         esac
+         rm -f $tmpfile >/dev/null 2>&1
+         exit 0
+     fi
+     
+     #   create the version file according the the selected language
+     echo "new version: $version.$revision$bptype$bplevel ($date)"
+     case $LANGUAGE in
+         txt )
+             cat >$tmpfile <<'EOT'
+ 
+   This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)
+ 
+ EOT
+             ;;
+         c )
+             cat >$tmpfile <<'EOT'
+ /*
+ **  @FILE@ -- Version Information
+ **  [automatically generated and maintained by GNU shtool]
+ */
+ 
+ #ifdef _AS_HEADER
+ 
+ #ifndef _@FILESTR@
+ #define _@FILESTR@
+ #define @PREFIX@_VERSION 0x@HEX@
+ extern const int  @PREFIX@_Version;
+ extern const char @PREFIX@_VersionStr[];
+ extern const char @PREFIX@_Hello[];
+ extern const char @PREFIX@_GNUVersion[];
+ extern const char @PREFIX@_WhatID[];
+ extern const char @PREFIX@_RCSIdentID[];
+ extern const char @PREFIX@_WebID[];
+ extern const char @PREFIX@_PlainID[];
+ #endif /* _@FILESTR@ */
+ 
+ #else
+ 
+ const int  @PREFIX@_Version      = 0x@HEX@;
+ const char @PREFIX@_VersionStr[] = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
+ const char @PREFIX@_Hello[]      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
+ const char @PREFIX@_GNUVersion[] = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
+ const char @PREFIX@_WhatID[]     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
+ const char @PREFIX@_RCSIdentID[] = "$Id: shtool,v 1.1.1.1 2000/06/18 14:30:49 rse Exp $";
+ const char @PREFIX@_WebID[]      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
+ const char @PREFIX@_PlainID[]    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
+ 
+ #endif
+ 
+ EOT
+             ;;
+         perl )
+             cat >$tmpfile <<'EOT'
+ ##
+ ##  @FILE@ -- Version Information
+ ##  [automatically generated and maintained by GNU shtool]
+ ##
+ 
+ $@PREFIX@_Version    = 0x@HEX@;
+ $@PREFIX@_VersionStr = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
+ $@PREFIX@_Hello      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
+ $@PREFIX@_GNUVersion = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
+ $@PREFIX@_WhatID     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)";
+ $@PREFIX@_RCSIdentID = "\$Id: shtool,v 1.1.1.1 2000/06/18 14:30:49 rse Exp $/";
+ $@PREFIX@_WebID      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
+ $@PREFIX@_PlainID    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@";
+ 
+ 1;
+ EOT
+             ;;
+         python )
+             cat >$tmpfile <<'EOT'
+ ##
+ ##  @FILE@ -- Version Information
+ ##  [automatically generated and maintained by GNU shtool]
+ ##
+ 
+ @PREFIX@_Version    = 0x@HEX@
+ @PREFIX@_VersionStr = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)"
+ @PREFIX@_Hello      = "This is @NAME@, Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)"
+ @PREFIX@_GNUVersion = "@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@"
+ @PREFIX@_WhatID     = "@(#)@NAME@ Version @VERSION@.@REVISION@@BPTYPE@@BPLEVEL@ (@DAY@-@MONTH@-@YEAR@)"
+ @PREFIX@_RCSIdentID = "$Id: shtool,v 1.1.1.1 2000/06/18 14:30:49 rse Exp $"
+ @PREFIX@_WebID      = "@NAME@/@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@"
+ @PREFIX@_PlainID    = "@VERSION@.@REVISION@@BPTYPE@@BPLEVEL@"
+ 
+ EOT
+             ;;
+     esac
+     
+     #   now create the version file
+     rm -f $FILE >/dev/null 2>&1
+     sed \
+         -e "s|@FILE@|$FILE|g" \
+         -e "s|@FILESTR@|$FILESTR|g" \
+         -e "s|@PREFIX@|$PREFIX|g" \
+         -e "s|@NAME@|$NAME|g" \
+         -e "s|@HEX@|$HEX|g" \
+         -e "s|@VERSION@|$version|g" \
+         -e "s|@REVISION@|$revision|g" \
+         -e "s|@BPTYPE@|$bptype|g" \
+         -e "s|@BPLEVEL@|$bplevel|g" \
+         -e "s|@YEAR@|$year|g" \
+         -e "s|@MONTH@|$month|g" \
+         -e "s|@DAY@|$day|g" <$tmpfile >$FILE
+     rm -f $tmpfile >/dev/null 2>&1
+     exit 0
+     ;;
+ 
+ path )
+     ##
+     ##  path -- Deal with program paths
+     ##  Copyright (c) 1998-2000 Ralf S. Engelschall <rse@engelschall.com>
+     ##  Originally written for Apache
+     ##
+     
+     namelist="$*"
+     
+     #   check whether the test command supports the -x option
+     if [ -x /bin/sh ] 2>/dev/null; then
+         minusx="-x"
+     else
+         minusx="-r"
+     fi
+     
+     #   split path string
+     paths="`echo $opt_p |\
+             sed -e 's/^:/.:/' \
+                 -e 's/::/:.:/g' \
+                 -e 's/:$/:./' \
+                 -e 's/:/ /g'`"
+     
+     #   SPECIAL REQUEST
+     #   translate forward to reverse path
+     if [ ".$opt_r" = .yes ]; then
+         if [ "x$namelist" = "x." ]; then
+             rp='.'
+         else
+             rp=''
+             for pe in `IFS="$IFS/"; echo $namelist`; do
+                 rp="../$rp"
+             done
+         fi
+         echo $rp | sed -e 's:/$::'
+         exit 0
+     fi
+     
+     #   SPECIAL REQUEST
+     #   strip out directory or base name
+     if [ ".$opt_d" = .yes ]; then
+         echo "$namelist" |\
+         sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'
+         exit 0
+     fi
+     if [ ".$opt_b" = .yes ]; then
+         echo "$namelist" |\
+         sed -e 's;.*/\([^/]*\)$;\1;'
+         exit 0
+     fi
+     
+     #   MAGIC SITUATION
+     #   Perl Interpreter (perl)
+     if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then
+         rm -f $tmpfile
+         touch $tmpfile
+         found=0
+         pc=99
+         for dir in $paths; do
+             dir=`echo $dir | sed -e 's;/*$;;'`
+             nc=99
+             for name in perl perl5 miniperl; do
+                  if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then
+                      perl="$dir/$name"
+                      pv=`$perl -e 'printf("%.3f", $]);'`
+                      echo "$pv:$pc:$nc:$perl" >>$tmpfile
+                      found=1
+                  fi
+                  nc=`expr $nc - 1`
+             done
+             pc=`expr $pc - 1`
+         done
+         if [ $found = 1 ]; then
+             perl="`cat $tmpfile | sort -u | tail -1 | cut -d: -f4`"
+             rm -f $tmpfile
+             echo "$perl"
+             exit 0
+         fi
+         exit 1
+     fi
+     
+     #   MAGIC SITUATION
+     #   C pre-processor (cpp)
+     if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then
+         cat >$tmpfile.c <<'EOT'
+ #include <assert.h>
+ Syntax Error
+ EOT
+         #   1. try the standard cc -E approach
+         cpp="${CC-cc} -E"
+         (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
+         my_error=`grep -v '^ *+' $tmpfile.out`
+         if [ ".$my_error" != . ]; then
+             #   2. try the cc -E approach and GCC's -traditional-ccp option
+             cpp="${CC-cc} -E -traditional-cpp"
+             (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
+             my_error=`grep -v '^ *+' $tmpfile.out`
+             if [ ".$my_error" != . ]; then
+                 #   3. try a standalone cpp command in path and lib dirs
+                 for path in $paths /lib /usr/lib /usr/local/lib; do
+                     path=`echo $path | sed -e 's;/*$;;'`
+                     if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then
+                         cpp="$path/cpp"
+                         break
+                     fi
+                 done
+                 if [ ".$cpp" != . ]; then
+                     (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out
+                     my_error=`grep -v '^ *+' $tmpfile.out`
+                     if [ ".$my_error" != . ]; then
+                         #   ok, we gave up...
+                         cpp=''
+                     fi
+                 fi
+             fi
+         fi
+         rm -f $tmpfile.c $tmpfile.out
+         if [ ".$cpp" != . ]; then
+             echo "$cpp"
+             exit 0
+         fi
+         exit 1
+     fi
+     
+     #   STANDARD SITUATION
+     #   iterate over names
+     for name in $namelist; do
+         #   iterate over paths
+         for path in $paths; do
+             path=`echo $path | sed -e 's;/*$;;'`
+             if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then
+                 if [ ".$opt_s" != .yes ]; then
+                     echo "$path/$name" 2>&1
+                 fi
+                 exit 0
+             fi
+         done
+     done
+     exit 1
+     ;;
+ 
+ esac
+ 
+ exit 0
+ 
+ ##EOF##

CVSTrac 2.0.1