#!/usr/bin/perl -w

=head1 NAME

marcdump - MARC record dump utility

=head1 SYNOPSIS

B<marcdump> [options] file(s)

=cut

use strict;
use integer;

use MARC::File;
use MARC::Record;
use Getopt::Long;

my $opt_print = 1;
my $opt_quiet = 0;
my $opt_stats = 1;
my @opt_field = ();
my $opt_help = 0;
my $opt_lif = 0;

my $rc =
    GetOptions(
	"version"   => sub { print "$0, using MARC::Record v$MARC::Record::VERSION\n"; exit 1; },
	"print!"    => \$opt_print,
	"lif!"	    => \$opt_lif,
	"quiet"	    => \$opt_quiet,
	"stats!"    => \$opt_stats,
	"field=s"   => \@opt_field,
	"debug!"    => \$MARC::Record::DEBUG,
	"help"	    => \$opt_help,
	);

my @files = @ARGV;
if ( $opt_help || !@files || !$rc ) {
    print <DATA>;
    exit 1;
}

my $wants_leader = grep { /LDR/ } @opt_field;

my $class = $opt_lif ? "MARC::File::MicroLIF" : "MARC::File::USMARC";
eval "require $class"; # Must be quoted to get path searching
	
my %counts;
my %errors;
for my $filename ( @files ) {
	$counts{$filename} = 0;
	$errors{$filename} = 0;

	warn "$filename\n" unless $opt_quiet;

	my $file = $class->in( $filename ) or die $MARC::File::ERROR;

	while ( my $marc = $file->next() ) {
		++$counts{$filename};
		warn "$counts{$filename} records\n" if ( !$opt_quiet && ($counts{$filename} % 1000 == 0) );

		if ( @opt_field ) {
			$marc = $marc->clone( @opt_field );
			$marc->leader('') unless $wants_leader;
		}

		print $marc->as_formatted, "\n\n" if $opt_print;
		if ( $marc->warnings() ) {
			++$errors{$filename};
			print join( "\n", $marc->warnings(), "" );
		}
	} # while
	$file->close();
} # for 

if ( $opt_stats ) {
	print " Recs  Errs Filename\n";
	print "----- ----- --------\n";
	for my $key ( sort keys %counts ) {
		printf( "%5d %5d %s\n", $counts{$key}, $errors{$key}, $key );
	} # for
} # if stats

__END__
Usage: marcdump [options] file(s)

Options:
    --[no]print	    Print a MicroLIF-style dump of each record
    --lif	    Input files are MicroLIF, not USMARC
    --field=spec    Specify a field spec to include.  There may be many.
		    Examples:
			--field=245 --field=1XX
    --[no]quiet	    Print status messages
    --[no]stats	    Print a statistical summary by file at the end
    --version	    Print version information
    --help	    Print this summary
