X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXCommandmode.pm;h=ca6c053e7d03cae21ba4376aff4b0eb102e5ef82;hb=88c2b296ba903fdd356e351b83fcb844e2d6eacd;hp=12c84c009d7310d1ac7b57f163caca3f62153aaa;hpb=6f9f47b53d1b6c2a52722b525695fa1c03ab1ed7;p=spider.git diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 12c84c00..ca6c053e 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -10,7 +10,6 @@ package DXCommandmode; use POSIX; -use IO::File; @ISA = qw(DXChannel); @@ -27,14 +26,16 @@ use CmdAlias; use Filter; use Carp; use Minimuf; +use DXDb; use strict; -use vars qw(%Cache %cmd_cache $errstr %aliases); +use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase); %Cache = (); # cache of dynamically loaded routine's mod times %cmd_cache = (); # cache of short names $errstr = (); # error string from eval %aliases = (); # aliases for (parts of) commands +$scriptbase = "$main::root/scripts"; # the place where all users start scripts go # # obtain a new connection this is derived from dxchannel @@ -167,8 +168,7 @@ sub normal $self->send($self->msg('page', scalar @ans)); } else { for (@ans) { - s/\s+$//o; # why ????????? - $self->send($_); + $self->send($_) if $_; } } } @@ -205,7 +205,8 @@ sub run_cmd $cmdline =~ s|//|/|og; # split the command line up into parts, the first part is the command - my ($cmd, $args) = $cmdline =~ /^([\S\/]+)\s*(.*)/o; + my ($cmd, $args) = split /\s+/, $cmdline, 2; + $args = "" unless $args; if ($cmd) { @@ -216,7 +217,8 @@ sub run_cmd # alias it if possible my $acmd = CmdAlias::get_cmd($cmd); if ($acmd) { - ($cmd, $args) = "$acmd $args" =~ /^([\w\/]+)\s*(.*)/o; + ($cmd, $args) = split /\s+/, "$acmd $args", 2; + $args = "" unless $args; dbg('command', "aliased cmd: $cmd $args"); } @@ -241,7 +243,11 @@ sub run_cmd $Cache{$package}->{sub} = $c; } $c = $Cache{$package}->{sub}; - @ans = &{$c}($self, $args); + eval { + @ans = &{$c}($self, $args); + }; + + return ($@) if $@; } } else { dbg('command', "cmd: $cmd not found"); @@ -347,6 +353,14 @@ sub get_all return @out; } +# run a script for this user +sub run_script +{ + my $self = shift; + my $silent = shift || 0; + +} + # # search for the command in the cache of short->long form commands # @@ -487,15 +501,12 @@ sub find_cmd_name { #print STDERR "already compiled $package->handler\n"; ; } else { - - my $fh = new IO::File; - if (!open $fh, $filename) { + + my $sub = readfilestr($filename); + unless ($sub) { $errstr = "Syserr: can't open '$filename' $!"; return undef; }; - local $/ = undef; - my $sub = <$fh>; - close $fh; #wrap the code into a subroutine inside our unique package my $eval = qq( sub { $sub } );