File: make-cmds

package info (click to toggle)
asql 1.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 136 kB
  • sloc: perl: 840; makefile: 61; sh: 9
file content (86 lines) | stat: -rwxr-xr-x 1,297 bytes parent folder | download | duplicates (5)
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
}