try to fix protocol version
[spider.git] / perl / DXProtout.pm
index 1ef9c022a24d996c865ab162200f280cf4dc01f8..04eefe39b1e1d9d0446b757de619d8b6e4eba1bd 100644 (file)
@@ -20,14 +20,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,0));
-$main::build += $VERSION;
-$main::branch += $BRANCH;
+
+main::mkver($VERSION = q$Revision$);
 
 use vars qw($sentencelth);
 
-$sentencelth = 200;
+$sentencelth = 180;
  
 #
 # All the PCxx generation routines
@@ -66,14 +64,15 @@ sub pc11
 # create an announce message
 sub pc12
 {
-       my ($call, $text, $tonode, $sysop, $wx) = @_;
+       my ($call, $text, $tonode, $sysop, $wx, $origin) = @_;
        my $hops = get_hops(12);
-       $sysop = ' ' if !$sysop;
-       $text = ' ' if !$text;
-       $wx = '0' if !$wx;
-       $tonode = '*' if !$tonode;
+       $text ||= ' ';
        $text =~ s/\^/%5E/g;
-       return "PC12^$call^$tonode^$text^$sysop^$main::mycall^$wx^$hops^~";
+       $tonode ||= '*';
+       $sysop ||= ' ';
+       $wx ||= '0';
+       $origin ||= $main::mycall;
+       return "PC12^$call^$tonode^$text^$sysop^$origin^$wx^$hops^~";
 }
 
 #
@@ -94,13 +93,13 @@ sub pc16
                next unless $_;
                my $ref = $_;
                my $str = sprintf "^%s %s %d", $ref->call, $ref->conf ? '*' : '-', $ref->here;
-               if (length($s) + length($str) >= $sentencelth) {
+               if (length($s) + length($str) > $sentencelth) {
                        push @out, "PC16^$ncall" . $s . sprintf "^%s^", get_hops(16);
                        $s = "";
                }
                $s .= $str;
        }
-       push @out, "PC16^$ncall" . $s . sprintf "^%s^", get_hops(16) if length $s;
+       push @out, "PC16^$ncall" . $s . sprintf "^%s^", get_hops(16);
        return @out;
 }
 
@@ -108,8 +107,8 @@ sub pc16
 sub pc17
 {
        my @out;
+       my $node = shift;
        while (@_) {
-               my $node = shift;
                my $ref = shift;
                my $hops = get_hops(17);
                my $ncall = $node->call;
@@ -122,7 +121,8 @@ sub pc17
 # Request init string
 sub pc18
 {
-       return "PC18^DXSpider Version: $main::version Build: $main::build^$DXProt::myprot_version^";
+       my $v = $DXProt::myprot_version + int($main::version * 100);
+       return "PC18^DXSpider Version: $main::version Build: $main::build^$v^";
 }
 
 #
@@ -140,15 +140,18 @@ sub pc19
                my $call = $ref->call;
                my $here = $ref->here;
                my $conf = $ref->conf;
-               my $version = $ref->version;
-           my $str = "^$here^$call^$conf^$version";
-               if (length($s) + length($str) >= $sentencelth) {
+               my $version = $ref->version || 5401;
+               $version = 5300 + int($version*100) if $version < 2;
+               $version = 5252 + int($version*100) if $version < 3;
+               $version =~ s/\.\d+$//; # kludge
+               my $str = "^$here^$call^$conf^$version";
+               if (length($s) + length($str) > $sentencelth) {
                        push @out, "PC19" . $s . sprintf "^%s^", get_hops(19);
                        $s = "";
                }
                $s .= $str;
        }
-       push @out, "PC19" . $s . sprintf "^%s^", get_hops(19) if length $s;
+       push @out, "PC19" . $s . sprintf "^%s^", get_hops(19);
        return @out;
 }