#!/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
}
