#! /usr/bin/perl -w

# Program for  konvertere det norske postverkets postnmummertabell
# (tilbud5.txt) til en passende datastruktur.

my $in     = "bin/tilbud5.txt";
my $out    = "NO.pm";
my $source = "$out." . time;

rename($out, $source) or die "Unable to rename file $out";

open(IN,     $in)     or die "Unable to open the file $in";
open(SOURCE, $source) or die "Unable to open the file $source";
open(OUT,    ">$out") or die "Unable to open the file $out";

## Copy the old file

my $part = 1; # 1 (first) 2 (skip) 3 (last)
my @part1;
my @part3;

foreach (<SOURCE>)
{
  if (/\#\# bin\/mkpostalinfo begin/)
  {
    $part = 2; # This part we skip.
  }
  elsif (/\#\# bin\/mkpostalinfo end/)
  {
    $part = 3;
  }
  if    ($part == 1) { push(@part1, $_); }
  elsif ($part == 3) { push(@part3, $_); }
}

close SOURCE;

print OUT @part1;

print OUT "## bin/mkpostalinfo begin\n";
print OUT "## This data structure was auto generated on " . localtime() . ". Do NOT edit it!\n\n";

my %poststed;    # postnummer    > poststed
my %postkommune; # postnummer    > kommunenummer
my %kommune;     # kommunenummer > kommunenavn
my %kategori;    # postnummer    > kategori

my($postnr, $poststed, $kommunenr, $kommunenavn, $kategori);

foreach (<IN>)
{
  tr///;
  tr/\235//;
  tr/\217//;

  ($postnr, $poststed, $kommunenr, $kommunenavn, $kategori) 
    = unpack("A4A32A4A30A", $_);

  $poststed   {$postnr}    = $poststed;
  $postkommune{$postnr}    = $kommunenr;
  $kommunenavn{$kommunenr} = $kommunenavn;
  $kategori   {$postnr}    = $kategori;
}

close IN;

foreach (sort keys %poststed)
{
  print OUT  "\$postkommune{'" . $_ . "'} = '" . $postkommune{$_} . "';";
  print OUT " \$kategori{'"    . $_ . "'} = '" . $kategori{$_}    . "';";
  print OUT " \$poststed{'"    . $_ . "'} = '" . $poststed{$_}    . "';\n";
}

print OUT "\n";

foreach (sort keys %kommunenavn)
{
  print OUT "\$kommunenavn{'" . $_ . "'} = '" . $kommunenavn{$_} . "';\n";
}

print OUT "\n";

print OUT @part3;

close OUT;
