+ if ($pcno == 10) { # incoming talk
+
+ # is it for me or one of mine?
+ my $call = ($field[5] gt ' ') ? $field[5] : $field[2];
+ if ($call eq $main::mycall || grep $_ eq $call, get_all_user_calls()) {
+
+ # yes, it is
+ my $text = unpad($field[3]);
+ my $ref = DXChannel->get($call);
+ $ref->send("$call de $field[1]: $text") if $ref;
+ } else {
+ route($field[2], $line); # relay it on its way
+ }
+ return;
+ }
+
+ if ($pcno == 11) { # dx spot
+
+ # if this is a 'nodx' node then ignore it
+ last SWITCH if grep $field[7] =~ /^$_/, @DXProt::nodx_node;
+
+ # convert the date to a unix date
+ my $date = $field[3];
+ my $time = $field[4];
+ $date =~ s/^\s*(\d+)-(\w\w\w)-(19\d\d)$/$1 $2 $3/;
+ $time =~ s/^(\d\d)(\d\d)Z$/$1:$2 +0000/;
+ my $d = str2time("$date $time");
+ return if !$d; # bang out (and don't pass on) if date is invalid
+
+ # strip off the leading & trailing spaces from the comment
+ my $text = unpad($field[5]);
+
+ # store it away
+ Spot::add($field[1], $field[2], $d, $text, $field[6]);
+
+ # format and broadcast it to users
+ my $spotter = $field[6];
+ $spotter =~ s/^(\w+)-\d+/$1/; # strip off the ssid from the spotter
+ $spotter .= ':'; # add a colon
+
+ # send orf to the users
+ my $buf = sprintf "DX de %-7.7s %13.13s %-12.12s %-30.30s %5.5s\a\a", $spotter, $field[1], $field[2], $text, $field[4];
+ broadcast_users($buf);
+
+ last SWITCH;
+ }
+
+ if ($pcno == 12) { # announces
+
+ if ($field[2] eq '*' || $field[2] eq $main::mycall) {
+
+ # strip leading and trailing stuff
+ my $text = unpad($field[3]);
+ my $target = "To Sysops" if $field[4] eq '*';
+ $target = "WX" if $field[6];
+ $target = "To All" if !$target;
+ broadcast_users("$target de $field[1]: $text");
+
+ return if $field[2] eq $main::mycall; # it's routed to me
+ } else {
+ route($field[2], $line);
+ return; # only on a routed one
+ }
+
+ last SWITCH;
+ }
+