#!/usr/bin/perl -w
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
#NAME
#  zw_list - List Zwiefacher tunes 
#
#SYNOPSIS
#  zw_list [file]..
#
#REQUIRES
#
#DESCRIPTION
#  We read the hdr files for Zwiefacher, and generate a list showing the
#  patterns and titles.  We look for T: (title) lines of the following
#  formats:
#
#    T: Zwiefacher: Suserl
#    T: (P2WP2WP2W2)2((P2WP2)2P2WP2WP2W2)2
#
#OPTIONS
#
#EXAMPLES
#
#FILES
#
#BUGS
#
#SEE ALSO
#
#AUTHOR
#  John Chambers <jc@trillian.mit.edu>
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #

$| = 1;
$exitstat = 0;
($P = $0) =~ s".*/"";
$V = $ENV{"V_$P"} || $ENV{"D_$P"} || 1;	# Verbose level.

%zw = ();	# Zwiefacher table
$tmax = $pmax = 0;	# Max lengths

file:
for $f (glob 'hdr/ZW*.hdr') {
	print "File: $f\n" if $V>1;
	unless (open(F,$f)) {
		print STDERR "$0: Can't read \"$f\" [$!]\n" if $V>0;
		next file;
	}
	$ttl = '?';
	$pat = '?';
	while ($l = <F>) {
		$l =~ s/[\r\s]+$//;
		if ($l =~ /Wampert/) {
			print "Wampert matched.\n" if $V>1;
		}
		if ($l =~ /^T:\s*zw[ie]+fach\w*:\s*(.*)/i) {
			$ttl = $1;
			$ttl =~ s/^(der|die|das|des|dem|den|'s|a)\s+//i;
			$ttl =~ s/(^s')\s*//i;
			$ttl =~ s/\\"*([aous])/$1/g;
			$tlen = length($ttl);
			$tmax = $tlen if $tlen > $tmax;
			print " ttl: $ttl\n" if $V>1;
		} elsif ($l =~ /^T:\s([(PW\d\sNnx)]+)$/) {
			$pat = $1;
			$plen = length($pat);
			$pmax = $plen if $plen > $pmax;
			print " pat: $ttl\n" if $V>1;
			$zw{$ttl} = $pat;
			$ttl = $pat = '';
		} else {
			print "Drop: $l\n" if $V>2;
		}
	}
}
$lpat = '%' . $pmax . 's %s' . "\n";	# Output pattern
printf $lpat,'Patterns for','Zwiefache tunes';
printf $lpat,'-'x$pmax,'-'x$tmax;
for $ttl (sort {uc($a) cmp uc($b)} keys %zw) {
	$pat = $zw{$ttl};
	printf $lpat,$pat,$ttl;
}

print "$P: Exit with status $exitstat.\n" if $V>1;
exit $exitstat;

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
