1. protect against PC41s with field[3] == field[2]
[spider.git] / cmd / help.pl
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..51dfa930a413d56e9e2900b10927dd5068fa602a 100644 (file)
@@ -0,0 +1,79 @@
+# 
+# the help subsystem
+#
+# It is a very simple system in that you type in 'help <cmd>' and it
+# looks for a file called command.hlp in either the local_cmd directory
+# or the cmd directory (in that order). 
+#
+# Copyright (c) 1998 - Dirk Koopman G1TLH
+#
+# $Id$
+#
+
+my ($self, $line) = @_;
+my @out;
+
+# this is naff but it will work for now
+my $lang = $self->lang;
+$lang = 'en' if !$lang;
+
+# each help file contains lines that looks like:-
+#
+# === 0^EN^*^Description
+# text
+# text
+#
+# === 0^EN^help^Description
+# text
+# text
+# text 
+#
+# The fields are:- privilege level, Language, full command name, short description
+#
+
+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\/]//g;
+$line =~ s/\//\.\*\//g;
+$line =~ s/^\s+//g;
+$line =~ s/\s+$//g;
+$line = "help" if $line =~ /^\s*$/;
+
+# 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 =~ /^===/) {
+           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;
+       }
+}
+
+close($h);
+
+push @out, $self->msg('helpe2', $line) if @out == 0;
+
+return (1, @out);
+