# the help subsystem
#
# It is a very simple system in that you type in 'help <cmd>' and it
-# looks for a file called <cmd>.hlp in either the local_cmd directory
+# looks for a file called command.hlp in either the local_cmd directory
# or the cmd directory (in that order).
#
-# if you just type in 'help' by itself you get what is in 'help.hlp'.
-#
# Copyright (c) 1998 - Dirk Koopman G1TLH
#
# $Id$
my ($self, $line) = @_;
my @out;
-my ($path, $fcmd) = ($main::cmd, "help");;
-my @out;
-my @inpaths = ($main::localcmd, $main::cmd);
-my @helpfiles;
# this is naff but it will work for now
-$line = "help" if !$line;
-$fcmd = lc $line;
+my $lang = $self->lang;
+$lang = 'en' if !$lang;
-# each help file starts with a line that looks like:-
+# each help file contains lines that looks like:-
+#
+# === 0^*^Description
+# text
+# text
#
-# === 0^EN^HELP^Description
+# === 0^help^Description
# text
# text
# text
#
-# The fields are:- privilege level, Language, full command name, short description
+# The fields are:- privilege level, full command name, short description
#
-if (!open(H, "$path/$fcmd.hlp")) {
- return (1, "no help on $line available");
+#$DB::single = 1;
+
+
+my $defh = new IO::File;
+unless ($defh->open("$main::localcmd/Commands_en.hlp")) {
+ unless($defh->open("$main::cmd/Commands_en.hlp")) {
+ return (1, $self->msg('helpe1'));
+ }
+}
+
+my $h;
+if ($lang ne 'en') {
+ $h = new IO::File;
+ unless ($h->open("$main::localcmd/Commands_$lang.hlp")) {
+ unless($h->open("$main::cmd/Commands_$lang.hlp")) {
+ undef $h;
+ }
+ }
}
+
my $in;
-my $include = 0;
-my @in = <H>;
-close(H);
-
-foreach $in (@in) {
- next if $in =~ /^\s*\#/;
- chomp $in;
- if ($in =~ /^===/) {
- $include = 0;
- $in =~ s/=== //;
- my ($priv, $lang, $cmd, $desc) = split /\^/, $in;
- next if $priv > $self->priv; # ignore subcommands that are of no concern
- next if $self->lang && $self->lang ne $lang;
- push @out, "$cmd - $desc";
- $include = 1;
- next;
- }
- push @out, $in if $include;
+
+#$line =~ s/[^\w\/]//g;
+#$line =~ s/\//\.\*\//g;
+
+$line =~ s{[^\w/]}{}g;
+$line =~ s{/}{.*/}g;
+$line =~ s/^\s+//g;
+$line =~ s/[\s\r]+$//g;
+$line = "help" if $line =~ /^\s*$/;
+
+# sort out aliases
+my $alias = CmdAlias::get_hlp($line);
+$line = $alias if $alias;
+
+# non english help (if available)
+if ($h) {
+ my $state = 0;
+ foreach $in (<$h>) {
+ next if $in =~ /^\#/;
+ chomp $in;
+ $in =~ s/\r$//;
+ if ($in =~ /^===/) {
+ 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;
+ push @out, "$cmd $desc" unless $cmd =~ /-$/o;
+ $state = 1;
+ next;
+ }
+ if ($state > 0) {
+ push @out, " $in";
+ $state = 2;
+ }
+ }
+ $h->close;
+
+ # return if some help was given, otherwise continue to english help
+ return (1, @out) if @out && $state == 2;
}
-push @out, "No help available for $line" if @out == 0;
+# standard 'english' help
+my $state = 0;
+foreach $in (<$defh>) {
+ next if $in =~ /^\#/;
+ chomp $in;
+ if ($in =~ /^===/) {
+ 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;
+ push @out, "$cmd $desc" unless $cmd =~ /-$/o;
+ $state = 1;
+ next;
+ }
+ if ($state > 0) {
+ push @out, " $in";
+ $state = 2;
+ }
+}
+$defh->close;
+push @out, $self->msg('helpe2', $line) if @out == 0;
return (1, @out);