use DXVars;
use DXDebug;
use DXM;
+use DXLog;
+use CmdAlias;
use FileHandle;
use Carp;
use strict;
-use vars qw(%Cache %cmd_cache $errstr);
+use vars qw(%Cache %cmd_cache $errstr %aliases);
%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
+
#
# obtain a new connection this is derived from dxchannel
#
my $nchan = DXChannel->get($main::mycall);
my @pc16 = DXProt::pc16($nchan, $cuser);
DXProt::broadcast_ak1a(@pc16);
+ Log('DXCommand', "$call connected");
}
#
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, "Syserr: compile err on $package\n$@$errstr") if !$package ;
+ @ans = (0) if !$package ;
if ($package) {
my $c = qq{ \@ans = $package(\$self, \$args) };
}
}
-# my @ans = $self->eval_file($path, $fcmd, $args) if $path && $fcmd;
-# @ans = $self->eval_file($main::cmd, $cmd, $args) if !$ans[0];
if ($ans[0]) {
shift @ans;
$self->send(@ans) if @ans > 0;
} else {
shift @ans;
if (@ans > 0) {
- $self->send($self->msg('e2', @ans));
+ $self->send($self->msg('e2'), @ans);
} else {
$self->send($self->msg('e1'));
}
my $nchan = DXChannel->get($main::mycall);
my $pc17 = $nchan->pc17($self);
DXProt::broadcast_ak1a($pc17);
-
+
+ Log('DXCommand', "$call disconnected");
$ref->del() if $ref;
}
my $fh = new FileHandle;
if (!open $fh, $filename) {
$errstr = "Syserr: can't open '$filename' $!";
+ return undef;
};
- my $old = $fh->input_record_separator(undef);
+ local $/ = undef;
my $sub = <$fh>;
- $fh->input_record_separator($old);
close $fh;
#wrap the code into a subroutine inside our unique package
print "\$\@ = $@";
$errstr = $@;
delete_package($package);
- $package = undef;
} else {
#cache it unless we're cleaning out each time
$Cache{$package}{mtime} = $mtime;
#print Devel::Symdump->rnew($package)->as_string, $/;
$package = "DXCommandmode::$package" if $package;
+ $package = undef if $errstr;
return $package;
}