head 1.2; access; symbols SHTOOL_1_0_0:1.1.1.1 RSE:1.1.1; locks; strict; comment @# @; 1.2 date 99.04.29.11.21.30; author rse; state dead; branches; next 1.1; 1.1 date 99.04.29.11.19.34; author rse; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 99.04.29.11.19.34; author rse; state Exp; branches; next ; desc @@ 1.2 log @*** empty log message *** @ text @#!/sw/bin/perl %SCRIPT = {}; @@scripts = glob("*.sh"); foreach $s (@@scripts) { $name = $s; $name =~ s|\.sh$||; print "Reading $name..."; open(FP, "<$s") || die; $code = ''; $code .= $_ while (); close(FP); $oneline = 'unknown'; if ($code =~ m|##\s+$name\s+--\s+(.+?)\s*\n|s) { $oneline = $1; } $usage = 'unknown'; if ($code =~ m|##\s+Usage:\s+$name([^\n]*)\n|s) { $usage = $1; $usage =~ s|^\s+||s; $usage =~ s|\s+$||s; } $code =~ s|#!/bin/sh\n||sg; $code =~ s|##\n||sg; $code =~ s|##\s+.*?\n||sg; $code =~ s|\n\n+|\n\n|sg; $code =~ s|^[\s\n]+||s; $code =~ s|[\s\n]+$|\n|s; $SCRIPT->{$name} = {}; $SCRIPT->{$name}->{ONELINE} = $oneline; $SCRIPT->{$name}->{USAGE} = $usage; $SCRIPT->{$name}->{CODE} = $code; print "ok\n"; } $list = ''; foreach $name (sort(keys(%{$SCRIPT}))) { $list .= sprintf("## %-12s %s\n", $name, $SCRIPT->{$name}->{ONELINE}); } $list =~ s|\n$||s; $ulist = ''; foreach $name (sort(keys(%{$SCRIPT}))) { $ulist .= sprintf(" echo 'shtool %s %s'\n", $name, $SCRIPT->{$name}->{USAGE}); } $ulist =~ s|\n$||s; open(FP, ") { $license .= "##$_"; } close(FP); my $version = `sh newvers.sh -l txt -d long VERSION`; $version =~ s|\n$||s; print "Generating shtool..."; open(SUC, ">shtool") || die; print SUC <<"EOT"; #!/bin/sh ## ## shtool -- Shell Tool ## Version ${version} ## ${license} ## ## Usage: shtool ## ## Available commands: ${list} ## if [ \$# -eq 0 ]; then ${ulist} exit 1 fi util=\$1 shift case \$util in EOT foreach $name (sort(keys(%{$SCRIPT}))) { $code = $SCRIPT->{$name}->{CODE}; $oneline = $SCRIPT->{$name}->{ONELINE}; $usage = $SCRIPT->{$name}->{USAGE}; print SUC "$name )\n"; $code =~ s|^| |mg; sub mysub { my ($prolog, $code, $epilog) = @@_; $code =~ s|^ ||mg; return $prolog.$code.$epilog; } $code =~ s|(\<\<['"]?EOT['"]?\s*\n)(.+?\n)\s+(EOT)|&mysub($1, $2, $3)|sge; print SUC $code; print SUC ";;\n"; print SUC "\n"; } print SUC <<"EOT"; * ) echo "shtool:Error: Unknown command" exit 1 ;; esac ##EOF## EOT close(SUC); system("chmod a+rx shtool"); print "ok\n"; @ 1.1 log @Initial revision @ text @@ 1.1.1.1 log @Import of shtool 1.0.0 @ text @@