# the help subsystem
#
# apropos - this does a grep on the command file and returns the commands
# that contain the string searched for
#
# Copyright (c) 1998 - Dirk Koopman G1TLH
#
# $Id$
#

my ($self, $line) = @_;
my @out;

my $lang = $self->lang;
$lang = 'en' if !$lang;

print "$line\n";
my $in;
$line = 'help' unless $line;
$line =~ s/\W//g;   # remove dubious characters
print "$line\n";

my ($priv, $cmd, $param, $desc);
my %cmd;

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;
		}
	}
}

# do english help
foreach $in (<$defh>) {
	next if $in =~ /^\#/;
	chomp $in;
	$in =~ s/\r$//;
	if ($in =~ /^===/) {
#		print "$in\n";
		($priv, $cmd, $param, $desc) = $in =~ m{^===\s+(\d)\^(\S+)(\s+[^\^]+)?\^(.*)};
		$param ||= '';
		$desc ||= '';
		next if $priv > $self->priv;             # ignore subcommands that are of no concern
		next unless $in =~ /$line/i;
		next if $cmd =~ /-$/o;
		push @{$cmd{$cmd}->{en}}, "$cmd$param $desc";
		next;
	}
}
$defh->close;

# override with any not english help
if ($h) {
	my $include;
	foreach $in (<$h>) {
		next if $in =~ /^\#/;
		chomp $in;
		$in =~ s/\r$//;
		if ($in =~ /^===/) {
#			print "$in\n";
			($priv, $cmd, $param, $desc) = $in =~ m{^===\s+(\d)\^(\S+)(\s+[^\^]+)?\^(.*)};
			$param ||= '';
		    $desc ||= '';
			next if $priv > $self->priv;             # ignore subcommands that are of no concern
			next unless $in =~ /$line/i;
			next if $cmd =~ /-$/o;
			push @{$cmd{$cmd}->{$lang}}, "$cmd$param $desc";
			next;
		}
	}
	$h->close;
}

foreach my $k (sort keys %cmd) {
	my $v;
	if ($v = $cmd{$k}->{$lang}) {
		push @out, @$v; 
	} elsif	($v = $cmd{$k}->{en}) {
		push @out, @$v;
	}
}

push @out, $self->msg('helpe2', $line) if @out == 0;

return (1, @out);
