#! /usr/local/bin/perl

use strict;

my $header;

while (my $file = shift) {

    open(F, $file) or die "couldn't open $file";
    my ($case) = ($file =~ /\.([^.]+)\.mt\S+$/);
    $case = 'unknown' if !defined $case;

    <F>; <F>;                   # skip first two lines

    # read header lines, splitting into header fields until
    #  we see field 'alter#', which must be the last field on a line
    my @header_fields = ('case');
    my $num_header_lines = 0;
    do {
        $_ = <F> or die "error reading header line";
        chomp $_;
        @header_fields = (@header_fields, split);
        ++$num_header_lines;
    } until $header_fields[$#header_fields] eq 'alter#';

    my $this_header = join(" ", map(sprintf("%10s", $_), @header_fields)) . "\n";
    if (!$header) {
        $header = $this_header;
        print $header;
    } else {
        if ($header ne $this_header) {
            die "headers don't match";
        }
    }

    # read data lines, $num_header_lines at a time
    while (!eof(F)) {
        my @data_fields = ($case);
        for (my $i=0; $i<$num_header_lines; ++$i) {
            $_ = <F> or die "error reading data line";
            chomp $_;
            @data_fields = (@data_fields, split);
        }
        if ($#header_fields != $#data_fields) {
            die sprintf ("wrong number of data fields: got %d, expected %d",
              scalar @data_fields, scalar @header_fields);
        }
        print join(" ", map(sprintf("%10s", $_), @data_fields)) . "\n";
    }
}
