From b473fa8950fc9a6b747be44434569dec254b0897 Mon Sep 17 00:00:00 2001 From: djk Date: Mon, 30 Nov 1998 13:42:22 +0000 Subject: [PATCH] fixed problem caused by moving the command execution into a separate function with read (and using state changes with stored functions) fixed typo in sh/st --- cmd/show/station.pl | 2 +- perl/DXCommandmode.pm | 111 +++++++++++++++++++----------------------- perl/client.pl | 3 +- 3 files changed, 54 insertions(+), 62 deletions(-) diff --git a/cmd/show/station.pl b/cmd/show/station.pl index 6c78f45c..0f214033 100644 --- a/cmd/show/station.pl +++ b/cmd/show/station.pl @@ -20,7 +20,7 @@ if (@f == 0) { my $sort = $ref->sort; my $qth = $ref->qth; my $home = $ref->node; - push @out, "$call $sort $qth $node"; + push @out, "$call $sort $qth $home"; } } else { foreach $call (@f) { 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); } # diff --git a/perl/client.pl b/perl/client.pl index 32271957..5b35ee2d 100755 --- a/perl/client.pl +++ b/perl/client.pl @@ -52,7 +52,7 @@ sub cease if ($conn && $sendz) { $conn->send_now("Z$call|bye...\n"); } - $stdout->flush; + $stdout->flush if $stdout; kill(15, $pid) if $pid; sleep(1); exit(0); @@ -395,3 +395,4 @@ for (;;) { } } +exit(0); -- 2.34.1