From 73e98a489aae8672f35970732eb712c949a33abd Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Mon, 28 Jan 2019 17:33:34 +0100 Subject: [PATCH] fix handling of signed numbers in xml-db get function --- xml-db/get.pl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/xml-db/get.pl b/xml-db/get.pl index 52a4cb2..de68502 100755 --- a/xml-db/get.pl +++ b/xml-db/get.pl @@ -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)/ /g; $ret .= $cl.$t; } - when ("signed") { $ret .= sprintf("$cl%d",$value);} + when ("signed") { $t = sprintf("%i",$value); + $t =~ s/(?<=\d)(?=(?:\d\d\d)+\b)/ /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)/ /g; $ret .= $cl.$t; -- 2.43.0