change build number calculation to be more accurate
[spider.git] / perl / IntMsg.pm
index 150ec91a2f0a860c9a63ad73a2f2a81c74d73a2e..510a1f9a661ab03162ba9370c68ab5e3f4a56730 100644 (file)
 package IntMsg;
 
 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;
+
 use Msg;
 
 use vars qw(@ISA);
@@ -26,12 +33,23 @@ sub enqueue
 sub dequeue
 {
        my $conn = shift;
-       my $msg;
-       
-       while ($msg = shift @{$conn->{inqueue}}){
-               $msg =~ s/\%([2-9A-F][0-9A-F])/chr(hex($1))/eg;
-               $msg =~ s/[\x00-\x08\x0a-\x1f\x80-\x9f]/./g;         # immutable CSI sequence + control characters
-               &{$conn->{rproc}}($conn, $msg, $!);
-               $! = 0;
+
+       if ($conn && $conn->{msg} =~ /\n/) {
+               my @lines = split /\r?\n/, $conn->{msg};
+               if ($conn->{msg} =~ /\n$/) {
+                       delete $conn->{msg};
+               } else {
+                       $conn->{msg} = pop @lines;
+               }
+               for (@lines) {
+                       if (defined $_) {
+                               s/\%([0-9A-F][0-9A-F])/chr(hex($1))/eg;
+                               s/[\x00-\x08\x0a-\x19\x1b-\x1f\x80-\x9f]/./g;         # immutable CSI sequence + control characters
+                       } else {
+                               $_ = '';
+                       }
+                       &{$conn->{rproc}}($conn, $_) if exists $conn->{rproc};
+               }
        }
 }
+