version with the 'final' version of PC90 line in it
[spider.git] / perl / DXProtout.pm
index 95c1981359262202c5e255752327453540f640a7..38ace99bf1cb2ac9e379943a31805f58c23582e1 100644 (file)
@@ -19,6 +19,12 @@ use DXDebug;
 
 use strict;
 
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
 #
 # All the PCxx generation routines
 #
@@ -26,7 +32,7 @@ use strict;
 # create a talk string ($from, $to, $via, $text)
 sub pc10
 {
-       my ($from, $to, $via, $text) = @_;
+       my ($from, $to, $via, $text, $origin) = @_;
        my ($user1, $user2);
        if ($via && $via ne $to) {
                $user1 = $via;
@@ -35,10 +41,11 @@ sub pc10
                $user2 = ' ';
                $user1 = $to;
        }
+       $origin ||= $main::mycall;
        $text = unpad($text);
        $text = ' ' unless $text && length $text > 0;
        $text =~ s/\^/%5E/g;
-       return "PC10^$from^$user1^$text^*^$user2^$main::mycall^~";  
+       return "PC10^$from^$user1^$text^*^$user2^$origin^~";  
 }
 
 # create a dx message (call, freq, dxcall, text) 
@@ -353,6 +360,40 @@ sub pc85
        return "PC85^$tonode^$fromnode^$call^$msg^~";
 }
 
+# spider route broadcast
+sub pc90
+{
+       my $node = shift;
+       my $sort = shift;
+       my @out;
+       my $dxchan;
+       
+       while (@_) {
+               my $str = '';
+               for (; @_ && length $str <= 230;) {
+                       my $ref = shift;
+                       my $call = $ref->call;
+                       my $flag = 0;
+                       
+                       $flag += 1 if $ref->here;
+                       $flag += 2 if $ref->conf;
+                       if ($ref->is_node) {
+                               my $ping = int($ref->pingave * 10);
+                               $str .= "^N$flag$call,$ping";
+                               my $v = $ref->build || $ref->version;
+                               $str .= ",$v" if defined $v;
+                       } else {
+                               $str .= "^U$flag$call";
+                       }
+               }
+               push @out, $str if $str;
+       }
+       my $n = @out;
+       my $h = get_hops(90);
+       @out = map { sprintf "PC90^%s^%X^%s%d%s^%s^", $node->call, $main::systime, $sort, --$n, $_, $h } @out;
+       return @out;
+}
+
 1;
 __END__