#!/usr/bin/perl -w
 
# Dump all flag tables in table file.
# Flag tables not found is printed to STDERR.
# Author: P.Sannes, met.no 2010-05-12
 
use strict;
use Geo::BUFR;
 
my $table_path = '/usr/local/lib/bufrtables';
my $Btable = 'B0000000000000014000.TXT';
my $Ctable = 'C0000000000000014000.TXT';
 
Geo::BUFR->set_tablepath($table_path);
 
my $bufr = Geo::BUFR->new();
 
$bufr->load_BDtables($Btable);
$bufr->load_Ctable($Ctable);
 
for my $i (1..48000) {
    my $desc = sprintf "%06d", $i;
    my ($name, $unit) = ($bufr->element_descriptor($desc))[0,1];
    next unless defined $unit && $unit =~ /^FLAG( )?TABLE/;
    my $dump = $bufr->dump_codetable($desc, $Ctable);
    if ($dump) {
        print "$desc $name\n";
        print $dump;
    } elsif ($desc%1000 < 192) {
        # Don't care about local tables missing
        print STDERR "Flag table $desc is missing in $Ctable\n";
    }
}