rearrange spot broadcast so that it copes according to terminal type
[spider.git] / perl / DXCommandmode.pm
index c01085a548693a996576b80b16732209435e8be0..791256dc7090a45b864e1c1ca230565d43d207ee 100644 (file)
@@ -89,7 +89,7 @@ sub start
        $self->{priv} = $user->priv || 0;
        $self->{lang} = $user->lang || $main::lang || 'en';
        $self->{pagelth} = $user->pagelth || 20;
-       ($self->{width}) = $line =~ /width=(\d+)/;
+       ($self->{width}) = $line =~ /width=(\d+)/; $line =~ s/\s*width=\d+\s*//;
        $self->{width} = 80 unless $self->{width} && $self->{width} > 80;
        $self->{consort} = $line;       # save the connection type
        
@@ -106,8 +106,10 @@ sub start
        $self->{here} = 1;
 
        # sort out registration
-       if ($main::reqreg) {
+       if ($main::reqreg == 1) {
                $self->{registered} = $user->registered;
+       } elsif ($main::reqreg == 2) {
+               $self->{registered} = !$user->registered;
        } else {
                $self->{registered} = 1;
        }
@@ -284,7 +286,12 @@ sub normal
                } else {
                        eval {  @ans = &{$self->{func}}($self, $cmdline) };
                }
-               $self->send_ans("Syserr: on stored func $self->{func}", $@) if $@;
+               if ($@) {
+                       $self->send_ans("Syserr: on stored func $self->{func}", $@);
+                       delete $self->{func};
+                       $self->state('prompt');
+                       undef $@;
+               }
                $self->send_ans(@ans);
        } else {
                $self->send_ans(run_cmd($self, $cmdline));
@@ -717,7 +724,7 @@ sub talk
        my ($self, $from, $to, $via, $line) = @_;
        $line =~ s/\\5E/\^/g;
        $self->local_send('T', "$to de $from: $line") if $self->{talk};
-       Log('talk', $to, $from, $main::mycall, $line);
+       Log('talk', $to, $from, $via?$via:$main::mycall, $line);
        # send a 'not here' message if required
        unless ($self->{here} && $from ne $to) {
                my $key = "$to$from";
@@ -779,7 +786,13 @@ sub dx_spot
                return unless $filter;
        }
 
-       my $buf = Spot::formatb($self->{user}->wantgrid, $_[0], $_[1], $_[2], $_[3], $_[4]);
+
+       my $t = ztime($_[2]);
+       my $ref = DXUser->get_current($_[4]);
+       my $loc = $ref->qra if $ref && $ref->qra && $self->{user}->wantgrid;
+       $loc = ' ' . substr($loc, 0, 4) if $loc;
+       $loc = "" unless $loc;
+       my $buf = sprintf "DX de %-7.7s%11.1f  %-12.12s %-*s $t$loc", "$_[4]:", $_[0], $_[1], $self->{consort} eq 'local' ? 29 : 30, $_[3];
        $buf .= "\a\a" if $self->{beep};
        $buf =~ s/\%5E/^/g;
        $self->local_send('X', $buf);