re-order the prompts and stuff
[spider.git] / perl / DXCommandmode.pm
index 6986a41aa60b1d8188dbc06d7ce4715a32eb35c1..9f3c669e26922e39a7118170887048e27ff51f30 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+)/ );
@@ -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");
@@ -144,6 +135,22 @@ sub start
                run_cmd($DXProt::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;
 }
 
 #
@@ -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(@_ );