GIF89a=( �' 7IAXKgNgYvYx\%wh&h}t�h%�s%x�}9�R��&�0%� (�.��5�SD��&�a)�x5��;ͣ*ȡ&ղ)ׯ7׵<ѻ4�3�H֧KͯT��Y�aq��q��F� !� ' !� NETSCAPE2.0 , =( ��pH,�Ȥr�l:xШtJ�Z�جv��z��xL.:��z�n���|N�����~�������& !�0`9R�}��"�"a:S�~x��������g���E�������R���E����B�� ��ȸ��D���"�Ů� �H��L��D٫D�B�����D���T���H �G��A R�ڐ |�� ٭&��E8�S�kG�A�px�a��� R2XB��E8I���6X�:vT)�~��q�賥��"F~%x� � 4#Z�0O|-4Bs�X:= Q� Sal��yXJ`GȦ|s h��K3l7�B|�$'7Jީܪ0!��D�n=�P� ����0`�R�lj����v>���5 �.69�ϸd�����nlv�9��f{���Pbx �l5}�p� ��� �3a���I�O����!ܾ���i��9��#��)p�a ޽ �{�)vm��%D~ 6f��s}Œ�D�W E�`!� �&L8x� �ܝ{)x`X/>�}m��R�*|`D�=�_ ^�5 !_&'a�O�7�c��`DCx`�¥�9�Y�F���`?��"� �n@`�} lď��@4>�d S �v�xN��"@~d��=�g�s~G��� ���ud &p8Q�)ƫlXD����A~H�ySun�j���k*D�LH�] ��C"J��Xb~ʪwSt}6K,��q�S:9ت:���l�@�`�� �.۬�t9�S�[:��=`9N����{¿�A !R�:���6��x�0�_ �;������^���#����!����U���;0L1�����p% A��U̬ݵ��%�S��!���~`�G���� ���=4�np�3���������u�u�ٮ|%2�I��r�#0��J``8�@S@5� ���^`8E�]�.�S���7 � �0�j S�D� z���i�S�����!���l��w9*�D�I�nEX��� &A�Go�Qf��F��;���}�J����F5��Q|���X��T��y���]� o ��C=��:���PB@ D׽S�(>�C�x}`��xJЬ�۠��p+eE0`�}`A �/NE�� �9@��� H�7�!%B0`�l*��!8 2�%� �:�1�0E��ux%nP1�!�C)�P81l�ɸF#Ƭ{����B0>�� �b�`��O3��()yRpb��E.ZD8�H@% �Rx+%���c� ���f��b�d�`F�"8�XH"��-�|1�6iI, 2�$+](A*j� QT�o0.�U�`�R�}`�SN����yae�����b��o~ S)�y�@��3 �tT�0�&�+~L�f"�-|�~��>!�v��~�\Q1)}@�}h#aP72�"�$ !� " , =( &7IAXG]KgNgYvYxR"k\%w]'}h}t�h%�g+�s%r.m3ax3�x�}9��&��+�!7�0%� (�.�SD��&��;�"&ײ)׻4��6�K� �@pH,�Ȥr�l:xШtJ�Z�جv��z��xL.:��z�n���|N�����~�������& !�0`9R�}��"�"a:S�~x��������g �� E �� �������E �´��C���ǶR��D��"Ʒ�ʱH��M��GڬD�B����D��T����G���C�C� l&�~:'�tU�6ɹ#��)�'�.6�&��Ȼ K(8p0N�?!�2"��NIJX>R��OM '��2�*x�>#n� �@<[:�I�f ��T���Cdb��[�}E�5MBo��@�`@��tW-3 �x�B���jI�&E�9[T&$��ﯧ&"s��ȳ����dc�UUρ#���ldj?����`\}���u|3'�R]�6 �S#�!�FKL�*N E���`$�:e�YD�q�.�촁�s \-�jA 9�����-��M[�x(�s��x�|���p��}k�T�DpE@W� ��]k`1� ���Yb ��0l��*n0��"~zBd�~u�7�0Bl��0-�x~|U�U0 �h�*HS�|��e"#"?vp�i`e6^�+q��`m8 #V�� ��VS|`��"m"сSn|@:U���~`pb�G�ED����2F�I�? >�x� R� ��%~jx��<�a�9ij�2�D��&: Z`�]w���:�6��B�7eFJ|�ҧ�,���FǮcS�ʶ+B�,�ܺN���>PAD�HD��~���n��}�#�� Q��S���2�X�{�k�lQ�2�����w�|2� h9��G�,m���3��6-��E�L��I�³*K���q�`DwV�QXS��peS��� qܧTS����R�u �<�a�*At�lmE� � ��N[P1�ۦ��$��@`��Dpy�yXvCAy�B`}D� 0QwG#� �a[^�� $���Ǧ{L�"[��K�g�;�S~��GX.�goT.��ư��x���?1z��x~:�g�|�L� ��S`��0S]P�^p F<""�?!,�!N4&P� ����:T�@h�9%t��:�-~�I<`�9p I&.)^ 40D#p@�j4�ج:�01��rܼF2oW�#Z ;$Q q  �K��Nl#29 !F@�Bh�ᏬL!XF�LHKh�.�hE&J�G��<"WN!�����Y@� >R~19J"�2,/ &.GXB%�R�9B6�W]���W�I�$��9�RE8Y� ��"�A5�Q.axB�&ة�J�! �t)K%tS-�JF b�NMxL��)�R��"���6O!TH�H� 0 !� ) , =( &AXKgNgYvYxR"k\%wh&h}h%�g+�s%r.x3�x�}9��&��+�R,�!7�0%� (�.��5��&�a)��;�"&ף*Ȳ)ׯ7׻4�3��6�H֧KͻH�T��Y��q��h� ��pH,�Ȥr�l:xШtJ�Z�جv��z��xL.:��z�n���|N�����~�������& !�0`9R�}��"�"a:S�~x��������g �� E$����� � ����$E$��"��D� � ������R��C��� E ��H�M��G�D� �B��ϾD��a��`1r��Ӑ�� �o~�zU!L�C'�yW�UGt����ll�0���uG�)A�s[��x� �xO%��X2�  P�n:R/��aHae+�Dm?# ǣ6�8�J�x�Di�M���j���5oQ7�- <! *�l��R2r/a!l)d� A"�E���� &� ;��c �%����b��pe~C"B���H�eF2��`8qb�t_`ur`e� w�u3��Pv�h""�`�Íx�LĹ��3� �~ֺ�:���MDfJ� �۵�W�%�S�X �؁)�@��:E��w�u�Sxb8y\m�zS��Zb�E�L��w!y(>�"w�=�|��s�d �C�W)H�cC$�L �7r.�\{)@�`@ �X�$PD `aaG:���O�72E�amn]�"Rc�x�R� &dR8`g��i�xLR!�P &d����T���i�|�_ � Qi�#�`g:��:noM� :V �)p����W&a=�e�k� j���1߲s�x�W�jal|0��B0�, \j۴:6���C ��W��|��9���zĸV {�;��n��V�m�I��.��PN� ����C��+��By�ѾHŸ:��� 7�Y�FTk�SaoaY$D�S���29R�kt� ��f� ��:��Sp�3�I��DZ� �9���g��u�*3)O��[_hv ,���Et x�BH� �[��64M@�S�M7d�l�ܶ5-��U܍��z�R3Ԭ3~ ��P��5�g: ���kN�&0�j4���#{��3S�2�K�'ợl���2K{� {۶?~m𸧠�I�nE�='����^���_�=��~�#O���'���o..�Y�n��CSO��a��K��o,���b�����{�C�� "�{�K ��w��Ozdը�:$ ���v�] A#� ���a�z)Rx׿ƥ�d``�w-�y�f�K!����|��P��=�`�(f��'Pa ��BJa%��f�%`�}F����6>��`G"�}�=�!o`�^FP�ةQ�C���`(�}\�ݮ ��$<��n@dĠE#��U�I�!� #l��9`k���'Rr��Z�NB�MF �[�+9���-�wj���8�r� ,V�h"�|�S=�G_��"E� 0i*%̲��da0mVk�):;&6p>�jK ��# �D�:�c?:R Ӭf��I-�"�<�="��7�3S��c2RW ,�8(T"P0F¡Jh�" ; 403WebShell
403Webshell
Server IP : 81.88.48.95  /  Your IP : 10.2.217.94, 216.73.216.227
Web Server : Apache
System : Linux opus12 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u3 x86_64
User : nobody ( 99)
PHP Version : 5.3.3-7+squeeze3
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/bin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/bin/shtoolize
#!/usr/bin/perl
##
##  shtoolize -- Build shtool script out of ingredient scripts
##  Copyright (c) 1999-2008 Ralf S. Engelschall <rse@engelschall.com>
##
##  This file is part of shtool and 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 file 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>.
##

require 5.000;
use strict;

##
##  CONFIGURATION
##

#   General configuration
my $version     = "2.0.8 (18-Jul-2008)";
my $prefix      = "/usr";
my $datarootdir = "${prefix}/share";
my $datadir     = "${datarootdir}";
my $scriptdir   = "$datadir/shtool";

#   Available modules
my @available = qw(
    echo mdate table prop move install mkdir mkln mkshadow
    fixperm rotate tarball subst platform arx slo scpp version path
);

##
##  COMMAND LINE HANDLING
##

my $opt_h = 0;
my $opt_v = 0;
my $opt_q = 0;
my $opt_o = 'shtool';

#   this subroutine is derived from Perl's getopts.pl with the enhancement of
#   the "+" metacharater at the format string to allow a list to be build by
#   subsequent occurance of the same option. We use it here as a local copy
#   to be maximum independent.
sub mygetopt {
    my ($progname, $argumentative, @ARGV) = @_;
    my (@args, $first, $rest, $pos);
    my ($errs) = 0;
    local ($_);
    local ($[) = 0;

    @args = split( / */, $argumentative);
    while(@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
        ($first, $rest) = ($1,$2);
        if ($_ =~ m|^--$|) {
            shift(@ARGV);
            last;
        }
        $pos = index($argumentative,$first);
        if($pos >= $[) {
            if($args[$pos+1] eq ':') {
                shift(@ARGV);
                if($rest eq '') {
                    unless (@ARGV) {
                        print STDERR "$progname:Error: incomplete option: `$first' (needs an argument)\n";
                        ++$errs;
                    }
                    $rest = shift(@ARGV);
                }
                eval "\$opt_$first = \$rest;";
            }
            elsif ($args[$pos+1] eq '+') {
                shift(@ARGV);
                if($rest eq '') {
                    unless (@ARGV) {
                        print STDERR "$progname:Error: incomplete option: `$first' (needs an argument)\n";
                        ++$errs;
                    }
                    $rest = shift(@ARGV);
                }
                eval "push(\@opt_$first, \$rest);";
            }
            else {
                eval "\$opt_$first = 1";
                if($rest eq '') {
                    shift(@ARGV);
                }
                else {
                    $ARGV[0] = "-$rest";
                }
            }
        }
        else {
            print STDERR "$progname:Error: unknown option: `$first'\n";
            ++$errs;
            if($rest ne '') {
                $ARGV[0] = "-$rest";
            }
            else {
                shift(@ARGV);
            }
        }
    }
    return ($errs == 0, @ARGV);
}

sub usage {
    my ($progname, $cmdline, $rc) = @_;
    print STDERR "Usage: shtoolize [-h] [-v] [-q] [-o <script>] <module> [<module> ...]\n" if ($cmdline);
    my $a = join(' ', @available);
    my $a2 = '';
    ($a, $a2) = ($1, $2) if ($a =~ m|^(.{50}.*?)\s+(.+)$|);
    print STDERR "Available modules (use `all' for all modules):\n";
    print STDERR "  $a\n";
    print STDERR "  $a2\n" if ($a2);
    exit($rc);
}

my $rc;
($rc, @ARGV) = &mygetopt($0, "hvqo:", @ARGV);
&usage($0, 1, 1) if ($rc == 0);
if ($opt_v) {
    print "GNU shtool $version\n";
    exit(0);
}
&usage($0, 1, 0) if ($opt_h);

my @modules;
if ($#ARGV == -1) {
    print STDERR "$0:Error: missing module name(s)\n";
    &usage($0, 1, 1);
}
if ($#ARGV == 0 and $ARGV[0] eq 'all') {
    @modules = @available;
}
else {
    my $mod;
    foreach $mod (@ARGV) {
        if (not grep(/^$mod$/, @available)) {
            print STDERR "$0:Error: unknown module name: `$mod'\n";
            usage($0, 0, 1);
            exit(1);
        }
        push(@modules, $mod);
    }
}

##
##  INPUT PHASE
##

#   Find a module
sub find_module {
    my ($name) = @_;
    return "sh.$name" if (-f "sh.$name");
    return "$scriptdir/sh.$name";
}

#   Read the ingredients scripts
my $SCRIPT  = {};
my @used = ();
my @unused = ();
my $code;
my $name;
print(STDERR "Generating $opt_o") if (not $opt_q);
foreach $name (@available) {

    #   read script code
    my $file = &find_module($name);
    open(FP, "<$file") || die;
    $code = '';
    $code .= $_ while (<FP>);
    close(FP);

    #   strip away embedded documentation
    $code =~ s|##\n##\s+manual\s+page\n##\s+.+$||si;

    #   determine attributes
    my $len = length($code);
    my $oneline = '';
    if ($code =~ m|##\s+$name\s+--\s+(.+?)\s*\n|s) {
        $oneline = $1;
    }
    my $usage = '';
    if ($code =~ m|##\s+Usage:\s+$name([^\n]*)\n|s) {
        $usage = $1;
        $usage =~ s|^\s+||s;
        $usage =~ s|\s+$||s;
    }
    if ($code =~ m|str_usage="\s*([^"]+?)\s*"|s) {
        $usage = $1;
    }

    #   adjust script code
    $code =~ s|^#!/bin/sh\n||s;
    my $head = '';
    1 while ($code =~ s|^(##\s*\n)|$head .= $1, ''|se ||
             $code =~ s|^(##\s+.*?\n)|$head .= $1, ''|se);
    $head =~ s|##\s+This file is.+\n##\s+USA.+?\n##\n||s;
    $code =~ s|\n\n+|\n\n|sg;
    my ($code1, $code2);
    if ($code =~ m|^(.+\n)\.\s+[^\n]*/sh\.common\n(.+)$|s) {
        ($code1, $code2) = ($1, $2);
    }
    else {
        ($code1, $code2) = (": #NOP\n", $code);
    }
    $code1 =~ s|^[\s\n]+||s;
    $code1 =~ s|[\s\n]+$|\n|s;
    $code2 =~ s|^[\s\n]+||s;
    $code2 =~ s|[\s\n]+$|\n|s;
    $code2 = $head.$code2;

    #   and remember for the output phase
    $SCRIPT->{$name} = {};
    $SCRIPT->{$name}->{ONELINE} = $oneline;
    $SCRIPT->{$name}->{USAGE}   = $usage;
    $SCRIPT->{$name}->{CODE1}   = $code1;
    $SCRIPT->{$name}->{CODE2}   = $code2;

    #   remember the module type
    if (grep(/^$name$/, @modules)) {
        printf(STDERR "...(%s %d/%d bytes)", $name, length($code), $len) if (not $opt_q);
        push(@used, $name);
    }
    else {
        push(@unused, $name);
    }
}
printf(STDERR "\n") if (not $opt_q);

#   Generate overview comment
my $overview = "##  Available commands:\n";
foreach $name (@used) {
    $overview .= sprintf("##    %-10s %s\n", $name, $SCRIPT->{$name}->{ONELINE});
}
if (@unused) {
   $overview .= "##\n";
   $overview .= "##  Not available commands (because module was not built-in):\n";
   foreach $name (@unused) {
       $overview .= sprintf("##    %-10s %s\n", $name, $SCRIPT->{$name}->{ONELINE});
   }
}
$overview =~ s|\n$||s;

#   Generate usage output
my $usage = "    echo 'Available <cmd-name> [<cmd-options>] [<cmd-args>]:'\n";
foreach $name (@used) {
    my $u  = $SCRIPT->{$name}->{USAGE};
    my $u2 = '';
    my $u3 = '';
    my $u4 = '';
    my $u5 = '';
    my $u6 = '';
    if ($u =~ m|^(.{50}.*?)\s+(.+)$|) {
        ($u, $u2) = ($1, $2);
    }
    if ($u2 =~ m|^(.{50}.*?)\s+(.+)$|) {
        ($u2, $u3) = ($1, $2);
    }
    if ($u3 =~ m|^(.{50}.*?)\s+(.+)$|) {
        ($u3, $u4) = ($1, $2);
    }
    if ($u4 =~ m|^(.{50}.*?)\s+(.+)$|) {
        ($u4, $u5) = ($1, $2);
    }
    if ($u5 =~ m|^(.{50}.*?)\s+(.+)$|) {
        ($u5, $u6) = ($1, $2);
    }
    $usage .= sprintf("    echo '  %-8s %s'\n", $name, $u);
    $usage .= sprintf("    echo '  %-8s %s'\n", '', $u2) if ($u2);
    $usage .= sprintf("    echo '  %-8s %s'\n", '', $u3) if ($u3);
    $usage .= sprintf("    echo '  %-8s %s'\n", '', $u4) if ($u4);
    $usage .= sprintf("    echo '  %-8s %s'\n", '', $u5) if ($u5);
    $usage .= sprintf("    echo '  %-8s %s'\n", '', $u6) if ($u6);
}
if (@unused) {
    $usage .= "    echo ''\n";
    $usage .= "    echo 'Not available <cmd-name> (because module was not built-in):'\n";
    foreach $name (@unused) {
        my $u  = $SCRIPT->{$name}->{USAGE};
        my $u2 = '';
        my $u3 = '';
        my $u4 = '';
        my $u5 = '';
        my $u6 = '';
        if ($u =~ m|^(.{50}.*?)\s+(.+)$|) {
            ($u, $u2) = ($1, $2);
        }
        if ($u2 =~ m|^(.{50}.*?)\s+(.+)$|) {
            ($u2, $u3) = ($1, $2);
        }
        if ($u3 =~ m|^(.{50}.*?)\s+(.+)$|) {
            ($u3, $u4) = ($1, $2);
        }
        if ($u4 =~ m|^(.{50}.*?)\s+(.+)$|) {
            ($u4, $u5) = ($1, $2);
        }
        if ($u5 =~ m|^(.{50}.*?)\s+(.+)$|) {
            ($u5, $u6) = ($1, $2);
        }
        $usage .= sprintf("    echo '  %-8s %s'\n", $name, $u);
        $usage .= sprintf("    echo '  %-8s %s'\n", '', $u2) if ($u2);
        $usage .= sprintf("    echo '  %-8s %s'\n", '', $u3) if ($u3);
        $usage .= sprintf("    echo '  %-8s %s'\n", '', $u4) if ($u4);
        $usage .= sprintf("    echo '  %-8s %s'\n", '', $u5) if ($u5);
        $usage .= sprintf("    echo '  %-8s %s'\n", '', $u6) if ($u6);
    }
}
$usage =~ s|\n$||s;

#   Generate usage output
my $toolpat = join("|", @used);

#   Determine size
my $size = "all available modules";
if (@unused) {
    $size = sprintf("%d/%d available modules", $#used+1, $#available+1);
}

#   Generate recreation command
my $recreate = "shtoolize -o${opt_o}";
if ($#unused == -1) {
    $recreate .= " all";
}
else {
    foreach $name (@used) {
        $recreate .= " $name";
    }
}

##
##  OUTPUT PHASE
##

#   Create output file
open(OUT, ">$opt_o") || die "unable to create output file `$opt_o\': $!";

#   Generate header of script
print OUT <<"EOT";
#!/bin/sh
##
##  GNU shtool -- The GNU Portable Shell Tool
##  Copyright (c) 1994-2008 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:  ${version}
##  Contents: ${size}
##

##
##  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>]]
##
${overview}
##

#   maximum Bourne-Shell compatibility
if [ ".\$ZSH_VERSION" != . ] && (emulate sh) >/dev/null 2>&1; then
    #   reconfigure zsh(1)
    emulate sh
    NULLCMD=:
    alias -g '\${1+"\$@"}'='"\$@"'
elif [ ".\$BASH_VERSION" != . ] && (set -o posix) >/dev/null 2>&1; then
    #   reconfigure bash(1)
    set -o posix
fi

#   maximum independence of NLS nuisances
for var in \\
    LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \\
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \\
    LC_TELEPHONE LC_TIME
do
    if (set +x; test -z "`(eval \$var=C; export \$var) 2>&1`"); then
        eval \$var=C; export \$var
    else
        unset \$var
    fi
done

#   initial command line handling
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" ] || [ ".\$1" = ".--help" ]; then
    echo "This is GNU shtool, version ${version}"
    echo 'Copyright (c) 1994-2008 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 '  -r, --recreate  recreate this shtool script via shtoolize'
    echo ''
${usage}
    echo ''
    exit 0
fi
if [ ".\$1" = ".-v" ] || [ ".\$1" = ".--version" ]; then
    echo "GNU shtool ${version}"
    exit 0
fi
if [ ".\$1" = ".-r" ] || [ ".\$1" = ".--recreate" ]; then
    ${recreate}
    exit 0
fi
if [ ".\$1" = ".-d" ] || [ ".\$1" = ".--debug" ]; then
    shift
    set -x
fi
name=`echo "\$0" | sed -e 's;.*/\\([^/]*\\)\$;\\1;' -e 's;-sh\$;;' -e 's;\\.sh\$;;'`
case "\$name" in
    ${toolpat} )
        #   implicit tool command selection
        tool="\$name"
        ;;
    * )
        #   explicit tool command selection
        tool="\$1"
        shift
        ;;
esac
arg_spec=""
opt_spec=""
gen_tmpfile=no

EOT

#   Insert the first part of the ingredient scripts
my $oneline;
my $usage;
print OUT <<"EOT";
##
##  DISPATCH INTO SCRIPT PROLOG
##

case \$tool in
EOT
foreach $name (@used) {
    print OUT "    $name )\n";
    $code = $SCRIPT->{$name}->{CODE1};
    $code =~ s|^(.)|        $1|mg;
    sub mysub {
        my ($prolog, $code, $epilog) = @_;
        $code =~ s|^        ||mg;
        return $prolog.$code.$epilog;
    }
    $code =~ s|(\<\<['"]?EOT['"]?\n)(.+?\n)[ \t]+(EOT)|&mysub($1, $2, $3)|sge;
    print OUT $code;
    print OUT "        ;;\n";
}
print OUT <<"EOT";
    -* )
        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
EOT

#   Insert common part
my $file = &find_module("common");
open(FP, "<$file");
my $common = '';
$common .= $_ while (<FP>);
close(FP);
$common =~ s|^.+?\n\n|\n|s;
print OUT $common;

#   Insert the second part of the ingredient scripts
print OUT <<"EOT";
##
##  DISPATCH INTO SCRIPT BODY
##

case \$tool in

EOT
foreach $name (@used) {
    print OUT "$name )\n";
    $code = $SCRIPT->{$name}->{CODE2};
    $code =~ s|^(.)|    $1|mg;
    sub mysub {
        my ($prolog, $code, $epilog) = @_;
        $code =~ s|^    ||mg;
        return $prolog.$code.$epilog;
    }
    $code =~ s|(\<\<['"]?EOT['"]?\n)(.+?\n)[ \t]+(EOT)|&mysub($1, $2, $3)|sge;
    $code =~ s|(IFS='\s*\n)\s+(')|$1$2|sg;
    print OUT $code;
    print OUT "    ;;\n";
    print OUT "\n";
}
print OUT <<"EOT";
esac

shtool_exit 0

EOT
close(OUT);
chmod(0755, $opt_o);

1;

Youez - 2016 - github.com/yon3zu
LinuXploit