+return if length ${ $h->{Emsg} };
+
+my @mv_names= qw(mass volume);
+
+my $canon_numeric= sub {
+ print STDERR "CANNUM @_\n";
+ my $sep= '';
+ my $out= '';
+ foreach my $ix (qw(0 1)) {
+ next unless defined $_[$ix];
+ $out .= $sep; $sep= ' ';
+ $out .= sprintf "%g%s", $_[$ix], (qw(kg l))[$ix];
+ }
+ return $out;
+};
+
+my @mv;
+if (@{ $h->{Specs} }) {
+ @mv= @{ $h->{Results}[0] }[1,2];
+ print STDERR "INITIAL VESSEL @mv\n";
+} else {
+ @mv= @{ $h->{'initial'} };
+ ${ $h->{Canon} }= $canon_numeric->(@mv);
+}
+
+print STDERR "NDELTAE $#{ $h->{'deltas'} }\n";
+foreach my $delta (@{ $h->{'deltas'} }) {
+ print STDERR "DELTA @$delta\n";
+ die if defined $delta->[2]; # emsg
+ foreach my $ix (qw(0 1)) {
+ next unless defined $delta->[$ix];
+ print STDERR "DELTA I $ix\n";
+ if (!defined $mv[$ix]) {
+ ${ $h->{Emsg} }= "Cannot add or subtract".
+ " $mv_names[$ix] to/from $mv_names[!$ix]";
+ return;
+ }
+ $mv[$ix] += $delta->[$ix] * $delta->[3];
+ }
+ ${ $h->{Canon} }.= " $delta->[4] ". $canon_numeric->(@$delta);
+}