1. protect against PC41s with field[3] == field[2]
[spider.git] / cmd / help.pl
index c74fad166ba4a073f70cf2d025be99040b99fcf4..51dfa930a413d56e9e2900b10927dd5068fa602a 100644 (file)
@@ -14,7 +14,6 @@ my ($self, $line) = @_;
 my @out;
 
 # this is naff but it will work for now
-$line = "help" if !$line;
 my $lang = $self->lang;
 $lang = 'en' if !$lang;
 
@@ -32,33 +31,44 @@ $lang = 'en' if !$lang;
 # The fields are:- privilege level, Language, full command name, short description
 #
 
-my $h = new FileHandle;
+my $h = new IO::File;
 
 if (!open($h, "$main::localcmd/Commands_$lang.hlp")) {
+       $lang = 'en';
        if (!open($h, "$main::cmd/Commands_$lang.hlp")) {
                return (1, $self->msg('helpe1'));
        }
 }
 my $in;
 
-$line =~ s/![\w\/]//og;
-$line =~ s/\//\.\*\//og;
+$line =~ s/[^\w\/]//g;
+$line =~ s/\//\.\*\//g;
+$line =~ s/^\s+//g;
+$line =~ s/\s+$//g;
+$line = "help" if $line =~ /^\s*$/;
 
-my $include;
+# sort out aliases
+my $alias = CmdAlias::get_hlp($line);
+$line = $alias if $alias;
+
+my $state = 0;
 foreach $in (<$h>) {
        next if $in =~ /^\#/;
        chomp $in;
        if ($in =~ /^===/) {
-               $include = 0;
+           last if $state == 2;           # come out on next command
                $in =~ s/=== //;
                my ($priv, $cmd, $desc) = split /\^/, $in;
                next if $priv > $self->priv;             # ignore subcommands that are of no concern
-               next unless $cmd =~ /$line/i;
+               next unless $cmd =~ /^$line/i;
                push @out, "$cmd $desc" unless $cmd =~ /-$/o;
-               $include = 1;
+               $state = 1;
                next;
        }
-       push @out, "   $in" if $include;
+       if ($state > 0) {
+           push @out, " $in";
+               $state = 2;
+       }
 }
 
 close($h);