#! /usr/bin/perl -w
my $topdown=1;
if($ARGV[0] =~ /-bu/i){
  $topdown=0;
  shift;
}
my $treename = $ARGV[0] || "techgraph";

$treename =~ s:.*/(.*)/[^/]*:$1:;

print <<EOF;
#! /usr/bin/dot -Tps
strict digraph "$treename" {
  size="7.7,11";
  margin=".3,.3";
  ratio=fill;
  node [ fontname=Helvetica, fontsize=15 ];
  nodesep=.2;
  ranksep=.5;
  // } for emacs ;-)
 "$treename      " [ shape=plaintext,fontname = "Helvetica-BoldOblique", fontsize =40 ];
EOF
  ;
print "edge [dir=back];\n" unless $topdown;

my $format;
while(<>){
  next unless /options="(.*)"/;
  $format=$1;
  last;
}
if($format==1.9) {
  #name     = _("Advanced Flight")
  #req1     = "Flight"
  #req2     = "Electricity"
  my ($name,$cnt);
  while(<>){
    if(/name.*= *_\((".*")/){
      $name=$1;
      $cnt=0;
    }
    next if /Never/;
    if(/None/){
      print "$name [ shape=diamond ];\n" if $cnt;
      $cnt=1;
      next;
    }
    if($topdown) {
      print " $1 -> $name;\n"    if /req.*= *(".*")/;
    }
    else {
      print " $name -> $1;\n"    if /req.*= *(".*")/;
    }
  }
}
elsif($format==1.7) {
  #"Academy",                "Philosophy",              "None"                    ;A_ADVANCED
  while(<>){
    next if /req1/;
    next if /Never/;
    next unless /(".*?"),.*?(".*?"),.*?(".*?")/;
    print "$1 [ shape=diamond ];\n" if $2 eq '"None"' and $3 eq '"None"';
    if($topdown) {
      print "$2 -> $1;\n" unless $2 eq '"None"';
      print "$3 -> $1;\n" unless $3 eq '"None"';
    }
    else {
      print "$1 -> $2;\n" unless $2 eq '"None"';
      print "$1 -> $3;\n" unless $3 eq '"None"';
    }
  }
}
else {
  die "unrecognized format";
}
print "}\n";
