Index: /trunk/tools/listcmf
===================================================================
--- /trunk/tools/listcmf	(revision 33966)
+++ /trunk/tools/listcmf	(revision 33967)
@@ -58,10 +58,15 @@
 
 
-my ( $cmf, $out, $opihi_read_file, $append, $save_temps, $verbose);
+my ( $cmf, $out, $opihi_read_file, $append, $help, $verbose);
+
+my ($exp_time, $filter, $zero_point);
 
 GetOptions(
             'opihi-read-file|r=s'   => \$opihi_read_file,
             'append'                => \$append,
-	    'save-temps'            => \$save_temps,
+            'zero-point|z=s'        => \$zero_point,
+            'exptime|e=s'           => \$exp_time,
+            'filter|e=s'            => \$filter,
+            'help|h'                => \$help,
             'verbose|v'             => \$verbose,
 ) or pod2usage( 2 );
@@ -75,5 +80,8 @@
 my $input = $cmf;
 
-die "usage: listcmf <cmf_filename> [<listfile> <ext>]\n" unless defined($cmf);
+if ($help or !defined $cmf) {
+    print STDERR "usage: listcmf <cmf_filename> [<listfile>] [--opihi-read-file <filename>]\n";
+    die "usage: listcmf <cmf_filename> [<listfile>] [--append] [--opihi-read-file <filename>] [--zero-point <zp>] [--exptime <exptime>] [--filter <filter>]\n";
+}
 
 # output file handle
@@ -87,9 +95,8 @@
 
 
-my ($exp_time, $zero_point, $filter);
 my %extensions;
 # read the keywords and list of extensions from the header
 {
-    my $header_data = `ftlist $cmf kh include=EXPTIME,FPA.ZP,FPA.FILTERID`;
+    my $header_data = `ftlist $cmf kh include=EXPTIME,FPA.ZP,FPA.FILTERID,FILTER,EXPOTIME`;
 
     die "failed to extract header information form $cmf\n" if !$header_data;
@@ -106,13 +113,14 @@
 
             if (! ($hdu_name =~ /SkyChip/) ) {
-                print STDERR "unexpected extension name found: $hdu_name\n";
-                die "expected SkyChip.*\n";
+#                print STDERR "unexpected extension name found: $hdu_name\n";
+#                die "expected SkyChip.*\n";
             }
             my (undef, $ext) = split '\.', $hdu_name;
+            $ext = $hdu_name if !defined $ext;
             if ($type eq 'BinTable') {
                 printf STDERR "HDU %2d %4s  %-12s %4d cols %7d rows\n", $hdu_num, $ext, $type, $cols, $rows if $verbose;
                 # save extension offset (number - 1) in extensions hash
                 $extensions{$ext} = $hdu_num - 1;
-            } elsif ($ext eq 'hdr') {
+            } elsif ($ext and $ext eq 'hdr') {
                 # primary header
                 printf STDERR "HDU %2d %4s  %-12s\n", $hdu_num, $ext, "$type $cols" if $verbose;
@@ -120,18 +128,28 @@
         } elsif ($line =~ /=/) {
             # keyword line
+            $line =~ s/=//; 
             my ($key, $value);
             if ($line =~ /HIERARCH/) {
-                (undef, $key, undef, $value) = split " ", $line;
+                (undef, $key, $value) = split " ", $line;
                 # print STDERR "$key $value\n" if $verbose;
             } else {
-                ($key, undef, $value) = split " ", $line;
+                ($key, $value) = split " ", $line;
                 # print STDERR "$key $value\n" if $verbose;
             }
             if ($key eq 'EXPTIME') {
-                $exp_time = $value;
+                $exp_time = $value unless ((lc($value) =~ /nan/) or $exp_time);
+            } elsif ($key eq 'EXPOTIME') {
+                $exp_time = $value unless $exp_time;
             } elsif ($key eq 'FPA.FILTERID') {
-                $filter = substr $value, 1, 1;
+                $filter = substr $value, 1, 1 unless $filter;
+            } elsif ($key eq 'FILTER') {
+                $filter = substr $value, 1, 1 unless $filter;
+                if (!$filter) {
+                    $filter = undef;
+#                    print STDERR "Null value for filter setting to r\n";
+#                    $filter = "r";
+                }
             } elsif ($key eq 'FPA.ZP') {
-                $zero_point = $value;
+                $zero_point = $value unless $zero_point;
             }
         }
@@ -139,5 +157,8 @@
     die "failed to find filter in header" unless defined $filter;
     die "failed to find exposure time in header" unless defined $exp_time;
-    die "failed to find zero point in header" unless defined $zero_point;
+    if (!defined $zero_point) {
+        print STDERR "failed to find zero point in header using 25\n";
+        $zero_point = 25.0;
+    }
     printf STDERR "$cmf: %2d extensions filter: $filter zpt: $zero_point exposure_time: $exp_time\n", scalar (keys %extensions) if $verbose;
 }
@@ -235,4 +256,5 @@
     printf OUT '$EXPTIME_%s = %f' .  "\n", $filter, $exp_time;
     printf OUT '$ZPT_%s = %f' . "\n", $filter, $zero_point;
+    printf OUT '$FILTER = %s' . "\n", $filter;
     print OUT "read IPP_IDET 1";
     my $n = 2;
