- my $mask = 1 << $j;
- my $cond
- = ( ( $c1 & $mask ) * 4 )
- + ( ( $c2 & $mask ) * 2 )
- + ( ( $c3 & $mask ) * 1 )
- ;
- $cond >>= $j;
+
+ my $acl_block =
+ $sector < 32 ? $j :
+ $j % 5 == 0 ? $j / 5 :
+ undef; # display condition only once for block group
+
+ if ( defined $acl_block ) {
+ my $trailer = $j == ( $blocks - 1 );
+ my $mask = 1 << $acl_block;
+ my $cond
+ = ( ( $c1 & $mask ) * 4 )
+ + ( ( $c2 & $mask ) * 2 )
+ + ( ( $c3 & $mask ) * 1 )
+ ;
+ $cond >>= $acl_block;
+ $condition = sprintf ' %03b %s'
+ , $cond
+ , $trailer ? $access_condition_trailer->{$cond}
+ : $access_condition_data->{$cond}
+ ;
+ if ( ! $trailer && ( $cond == 0b001 || $cond == 0b011 ) ) {
+ my $value_block = unpack 'x4Lx8', $block;
+ my $positive = $value_block & 0x8000_0000;
+ my $value = $value_block & 0x7fff_ffff;
+ $value = -$value if ! $positive;
+ #$condition .= sprintf " = %d 0x%x", $value, $value_block;
+ $condition .= " = " . $value;
+ }
+ } else {
+ $condition = '';
+ }