+our @report;
+our $last_filehead = -1;
+
+sub report_on_hunk () {
+ return unless @report;
+ if ($last_filehead != $ifilehead) {
+ foreach (my $i=$ifilehead; $i<$ifirsthunkhead; $i++) {
+ print $d[$i];
+ }
+ $last_filehead = $ifilehead;
+ }
+ my $dummy_r = { S => (scalar @d)+1, E => (scalar @d)+1 };
+ my $r;
+ for (my $i=$ihunkhead; ; $i++) {
+ for (;;) {
+ $r //= shift @report;
+ $r //= $dummy_r;
+ last if $i < $r->{E};
+ confess unless $r->{Done} == 03;
+ $r = undef;
+ }
+
+ last unless $i<$ihunkend;
+
+ if ($i == $r->{S}) {
+ print "!! $r->{M}";
+ $r->{Done} |= 01;
+ }
+ if ($i >= $r->{S}) {
+ print "!";
+ $r->{Done} |= 02;
+ } else {
+ print " ";
+ }
+ print $d[$i];
+ }
+ confess unless $r = $dummy_r;
+}
+