X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?p=spider.git;a=blobdiff_plain;f=perl%2FDXCommandmode.pm;h=4f0566f9ebc2f5f4f322d5db6d4d9b8e566cd1b6;hp=84d809fd257e730e30ed388dd324be25e3d93665;hb=b473fa8950fc9a6b747be44434569dec254b0897;hpb=3194378dfc13933cfaaae43989b971d8994d17aa diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 84d809fd..4f0566f9 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -97,7 +97,14 @@ sub normal # remove leading and trailing spaces $cmdline =~ s/^\s*(.*)\s*$/$1/; - if ($self->{state} eq 'prompt') { + if ($self->{func}) { + my $c = qq{ \@ans = $self->{func}(\$self, \$cmdline) }; + dbg('eval', "stored func cmd = $c\n"); + eval $c; + if ($@) { + return (1, "Syserr: Eval err $errstr on stored func $self->{func}"); + } + } elsif ($self->{state} eq 'prompt') { @ans = run_cmd($self, $cmdline) if length $cmdline; if ($self->{pagelth} && @ans > $self->{pagelth}) { @@ -141,7 +148,7 @@ sub normal } else { $self->state('prompt'); } - } + } # send a prompt only if we are in a prompt state $self->prompt() if $self->{state} =~ /^prompt/o; @@ -154,73 +161,57 @@ sub normal sub run_cmd { - my $self = shift; - my $user = $self->{user}; - my $call = $self->{call}; - my $cmdline = shift; - my @ans; - - # are we in stored state? - if ($self->{func}) { - my $c = qq{ \@ans = $self->{func}(\$self, \$cmdline) }; - dbg('eval', "stored func cmd = $c\n"); - eval $c; - if ($@) { - return (1, "Syserr: Eval err $errstr on stored func $self->{func}"); - } - } else { - - # special case only \n input => " " -# if ($cmdline eq " ") { -# $self->prompt(); -# return; -# } + my $self = shift; + my $user = $self->{user}; + my $call = $self->{call}; + my $cmdline = shift; + my @ans; + # strip out // $cmdline =~ s|//|/|og; - + # split the command line up into parts, the first part is the command my ($cmd, $args) = $cmdline =~ /^([\w\/]+)\s*(.*)/o; - + if ($cmd) { - - my ($path, $fcmd); - - # alias it if possible - my $acmd = CmdAlias::get_cmd($cmd); - if ($acmd) { - ($cmd, $args) = "$acmd $args" =~ /^([\w\/]+)\s*(.*)/o; - } - - # first expand out the entry to a command - ($path, $fcmd) = search($main::localcmd, $cmd, "pl"); - ($path, $fcmd) = search($main::cmd, $cmd, "pl") if !$path || !$fcmd; - - my $package = find_cmd_name($path, $fcmd); - @ans = (0) if !$package ; - - if ($package) { - my $c = qq{ \@ans = $package(\$self, \$args) }; - dbg('eval', "cluster cmd = $c\n"); - eval $c; - if ($@) { - @ans = (0, "Syserr: Eval err cached $package\n$@"); - } - } + + my ($path, $fcmd); + + # alias it if possible + my $acmd = CmdAlias::get_cmd($cmd); + if ($acmd) { + ($cmd, $args) = "$acmd $args" =~ /^([\w\/]+)\s*(.*)/o; + } + + # first expand out the entry to a command + ($path, $fcmd) = search($main::localcmd, $cmd, "pl"); + ($path, $fcmd) = search($main::cmd, $cmd, "pl") if !$path || !$fcmd; + + my $package = find_cmd_name($path, $fcmd); + @ans = (0) if !$package ; + + if ($package) { + my $c = qq{ \@ans = $package(\$self, \$args) }; + dbg('eval', "cluster cmd = $c\n"); + eval $c; + if ($@) { + @ans = (0, "Syserr: Eval err cached $package\n$@"); + } + } } - } - - if ($ans[0]) { - shift @ans; - } else { - shift @ans; - if (@ans > 0) { - unshift @ans, $self->msg('e2'); + + if ($ans[0]) { + shift @ans; } else { - @ans = $self->msg('e1'); + shift @ans; + if (@ans > 0) { + unshift @ans, $self->msg('e2'); + } else { + @ans = $self->msg('e1'); + } } - } - return (@ans); + return (@ans); } #