make sure that pc92 C records are sent on init with last received time
[spider.git] / perl / DXProtout.pm
index a5498a0c8a45568675d23eb7fc5fea38094dd3e3..0ba94dc634c5789f0b4f35c3b46489d60e944091 100644 (file)
@@ -28,7 +28,7 @@ $main::branch += $BRANCH;
 use vars qw($sentencelth);
 
 $sentencelth = 180;
+
 #
 # All the PCxx generation routines
 #
@@ -123,7 +123,9 @@ sub pc17
 # Request init string
 sub pc18
 {
-       return "PC18^DXSpider Version: $main::version Build: $main::build^$DXProt::myprot_version^";
+       my $flags = " pc92";
+       $flags .= " xml" if DXXml::available(); 
+       return "PC18^DXSpider Version: $main::version Build: $main::build$flags^$DXProt::myprot_version^";
 }
 
 #
@@ -372,9 +374,65 @@ sub pc85
        return "PC85^$tonode^$fromnode^$call^$msg^~";
 }
 
-# spider route broadcast
-sub pc90
+# spider route broadcasts
+#
+
+my $_last_time;
+my $_last_occurs;
+
+sub _gen_time
+{
+       if (!$_last_time || $_last_time != $main::systime) {
+               $_last_time = $main::systime;
+               $_last_occurs = 0;
+               return $_last_time;
+       } else {
+               $_last_occurs++;
+               return sprintf "$_last_time.%02d", $_last_occurs;
+       }
+}
+
+sub _gen_pc92
+{
+       my $sort = shift;
+#      my $ext = $sort eq 'C';
+       my $ext = 1;
+       my $s = "PC92^$main::mycall^" . _gen_time . "^$sort";
+       for (@_) {
+               $s .= "^" . _encode_pc92_call($_, $ext);
+       }
+       return $s . '^H99^';
+}
+
+sub gen_pc92_with_time
+{
+       my $call = shift;
+       my $sort = shift;
+       my $t = shift;
+       my $ext = 1;
+       my $s = "PC92^$call^$t^$sort";
+       for (@_) {
+               $s .= "^" . _encode_pc92_call($_, $ext);
+       }
+       return $s . '^H99^';
+}
+
+# add a local one
+sub pc92a
+{
+       return _gen_pc92('A', @_);
+}
+
+# delete a local one
+sub pc92d
+{
+       return _gen_pc92('D', @_);
+}
+
+# send a config
+sub pc92c
 {
+       return _gen_pc92('C', @_);
 }
 
 1;