1. fix set/lockout so that it is possible to lock out all SSIDs except those
[spider.git] / perl / DXCommandmode.pm
index 6986a41aa60b1d8188dbc06d7ce4715a32eb35c1..a8418bd4daf0af368947b188f8c30a534279f26d 100644 (file)
@@ -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 <call> ' or '<call> ' 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(@_ );