#!/usr/bin/perl -w

use strict;

open MAPS, "> transmaps.h"
  or die "transmaps: couldn't write to transmaps.h: $!\n";

print MAPS <<__EOT__;
/* transmaps.h was automagically generated by transmaps and GNU recode.
   Any changes should be made in transmaps or utility.cc and NOT in this file!
 */

__EOT__

open RECODE, "recode -l|"
  or die "transmaps: open recode -l failed: $!\n";

my @sets;

while (<RECODE>) {
  if (/^EBCDIC.*$/) {
    push @sets, [$1, $2 ? $2 : "en"];
  } elsif (/^IBM\d+.*? (ebcdic.*) (ibm0*(\d+))/) {
    my @s = ($2, $3);
    my @alias = ($1 =~ m/\bebcdic(\w+)\b/g);
    push @sets, [@s, @alias];
  }
}

close RECODE
  or die
  $! ? "transmaps: close recode -l failed: $!\n"
    : "transmaps: recode -l returned $?\n";

sub recode {
  my $trans = shift;

  open RECODE, "recode -h $trans|"
    or die "transmaps: open recode -h $trans failed: $!\n";

  while (<RECODE>) {
    print MAPS;
  }

  close RECODE
    or die
      $! ? "transmaps: close recode -h $trans failed: $!\n"
	: "transmaps: recode -h $trans returned $?\n";

  print MAPS "\n";
}

my $s;

foreach $s (@sets) {
  my $name = $s->[0];

  recode("latin1:$name");
  recode("$name:latin1");
}

print MAPS <<__EOT__;
/* This is the translation-map index which is scanned in utility.c
 */

Tn5250TransMap transmaps [] = {
__EOT__

foreach $s (@sets) {
  my @s = @$s;
  my $name = shift @s;

  foreach (@s) {
    print MAPS "    {\"$_\", ${name}_to_latin1, latin1_to_${name}},\n";
  }
}

print MAPS "    {NULL, NULL, NULL}};\n";
