]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
fix handling of signed numbers in xml-db get function
authorJan Michel <j.michel@gsi.de>
Mon, 28 Jan 2019 16:33:34 +0000 (17:33 +0100)
committerJan Michel <j.michel@gsi.de>
Mon, 28 Jan 2019 16:34:04 +0000 (17:34 +0100)
xml-db/get.pl

index 52a4cb2b78fc4ad7f084e76ea7a5882ee89f599f..de68502e6f6690276b3941c83b3f43498ff69179 100755 (executable)
@@ -186,11 +186,18 @@ sub FormatPretty {
     $value &= ((1<<$obj->{bits})-1);
     $rawvalue = $value;
 
+    if ($obj->{format} eq 'signed') {
+      if ($value &   (1<<($obj->{bits}-1))) {
+          $value &= ((1<<($obj->{bits}-1))-1); 
+          $value -=  (1<<($obj->{bits}-1));
+        }
+      }
+      
     if ($rates && $obj->{rate}) {
       $value = makerate($obj,$value,$addr,$b);
       $class.=" rate";
-    }
-
+    }      
+      
     $value = $value * ($obj->{scale}||1) + ($obj->{scaleoffset}||0);
   }
 
@@ -227,7 +234,9 @@ sub FormatPretty {
                             $t =~ s/(?<=\d)(?=(?:\d\d\d)+\b)/&#8198;/g;
                             $ret .= $cl.$t;
                           }
-        when ("signed")   { $ret .= sprintf("$cl%d",$value);}
+        when ("signed")   { $t    = sprintf("%i",$value);
+                            $t =~ s/(?<=\d)(?=(?:\d\d\d)+\b)/&#8198;/g;
+                            $ret .= $cl.$t;}  #$ret .= sprintf("$cl%d",$value);
         when ("binary")   { $t    = sprintf("%0".$obj->{bits}."b",$value);
                             $t =~ s/(?<=\d)(?=(?:\d\d\d\d)+\b)/&#8198;/g;
                             $ret .= $cl.$t;