1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#!/usr/bin/perl
#
# This is a quick hack which will read the specified asql file and
# output a complete list of all commands to STDOUT.
#
# It is designed to create the documentation for the shell automatically.
#
# Steve
# --
#
#
# We are called with a single argument - the path to 'asql'.
#
my $file = shift;
die "No file" unless ( defined($file) );
die "File not found - $file" unless ( -e $file );
#
# Read the text
#
my $text = '';
my $in = 0;
open( INPUT, "<", $file ) or
die "Failed to open $file -$!";
foreach my $line (<INPUT>)
{
next if ( !$line );
chomp($line);
next if ( !$line );
if ($in)
{
if ( $line =~ /END_COMMAND_TABLE/ )
{
$in = 0;
}
else
{
$text .= $line . "\n";
}
}
else
{
if ( $line =~ /START_COMMAND_TABLE/ )
{
$in = 1;
}
}
}
close(INPUT);
#
# Hack: declare our own dispatch table and make the read text
# refer to it.
#
my %dispatch;
$text =~ s/my \%dispatch/\%dispatch/g;
eval $text;
#
# Now output the text.
#
foreach my $key ( sort keys %dispatch )
{
my $cmd = $key;
my $under = "-" x length($key);
my $text = $dispatch{ $key }->{ 'help' };
print <<EOF;
$cmd
$under
$text
EOF
}
|