X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXCommandmode.pm;h=a8418bd4daf0af368947b188f8c30a534279f26d;hb=50f6466ca2dff82ca470a4abe327d741cffef61a;hp=6986a41aa60b1d8188dbc06d7ce4715a32eb35c1;hpb=428e91daacae4fddcabc7e6279c1fbd40edbbe91;p=spider.git diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 6986a41a..a8418bd4 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -30,9 +30,11 @@ use AnnTalk; use WCY; use Sun; use Internet; +use Script; + use strict; -use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase $maxerrors %nothereslug $suppress_ann_to_talk); +use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase $maxerrors %nothereslug); %Cache = (); # cache of dynamically loaded routine's mod times %cmd_cache = (); # cache of short names @@ -40,8 +42,6 @@ $errstr = (); # error string from eval %aliases = (); # aliases for (parts of) commands $scriptbase = "$main::root/scripts"; # the place where all users start scripts go $maxerrors = 20; # the maximum number of concurrent errors allowed before disconnection -$suppress_ann_to_talk = 1; # don't announce 'to ' or ' ' type announcements - use vars qw($VERSION $BRANCH); $VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); @@ -61,7 +61,7 @@ sub new my $pkg = shift; my $call = shift; my @rout = $main::routeroot->add_user($call, Route::here(1)); - DXProt::route_pc16($DXProt::me, $main::routeroot, @rout) if @rout; + DXProt::route_pc16($main::me, $main::routeroot, @rout) if @rout; return $self; } @@ -102,6 +102,7 @@ sub start $self->{wx} = $user->wantwx; $self->{dx} = $user->wantdx; $self->{logininfo} = $user->wantlogininfo; + $self->{ann_talk} = $user->wantann_talk; $self->{here} = 1; # get the filters @@ -119,16 +120,6 @@ sub start $user->qra(DXBearing::lltoqra($lat, $long)) if (defined $lat && defined $long); } - # send prompts and things - my $info = Route::cluster(); - $self->send("Cluster:$info"); - $self->send($self->msg('namee1')) if !$user->name; - $self->send($self->msg('qthe1')) if !$user->qth; - $self->send($self->msg('qll')) if !$user->qra || (!$user->lat && !$user->long); - $self->send($self->msg('hnodee1')) if !$user->qth; - $self->send($self->msg('m9')) if DXMsg::for_me($call); - $self->prompt; - # decide on echo if (!$user->wantecho) { $self->send_now('E', "0"); @@ -141,9 +132,25 @@ sub start my $lastoper = $user->lastoper || 0; my $homenode = $user->homenode || ""; if ($homenode eq $main::mycall && $lastoper + $DXUser::lastoperinterval < $main::systime) { - run_cmd($DXProt::me, "forward/opernam $call"); + run_cmd($main::me, "forward/opernam $call"); $user->lastoper($main::systime); } + + # run a script send the output to the punter + my $script = new Script(lc $call) || new Script('user_default'); + $script->run($self) if $script; + + # send cluster info + my $info = Route::cluster(); + $self->send("Cluster:$info"); + + # send prompts and things + $self->send($self->msg('namee1')) if !$user->name; + $self->send($self->msg('qthe1')) if !$user->qth; + $self->send($self->msg('qll')) if !$user->qra || (!$user->lat && !$user->long); + $self->send($self->msg('hnodee1')) if !$user->qth; + $self->send($self->msg('m9')) if DXMsg::for_me($call); + $self->prompt; } # @@ -444,7 +451,7 @@ sub disconnect } # issue a pc17 to everybody interested - DXProt::route_pc17($DXProt::me, $main::routeroot, @rout) if @rout; + DXProt::route_pc17($main::me, $main::routeroot, @rout) if @rout; # I was the last node visited $self->user->node($main::mycall); @@ -705,10 +712,10 @@ sub announce my $text = shift; my ($filter, $hops); - if ($suppress_ann_to_talk) { - my ($to, $call) = $text =~ /^\s*([\w-]+)[\s:]+([\w-]+)/; - return if ($to && $call && ((uc $to =~ /^TO?$/ && is_callsign(uc $call)) || is_callsign($call = uc $to))); - } + if (!$self->{ann_talk} && $to ne $self->{call}) { + my $call = AnnTalk::is_talk_candidate($_[0], $text); + return if $call; + } if ($self->{annfilter}) { ($filter, $hops) = $self->{annfilter}->it(@_ );