#!/usr/bin/perl -w

use strict;

sub dodir($);
sub lcfile($);
sub fixmake($);
sub fixpkg($);

sub dodir($) {
  my $dir = shift;

  #print "DIR: $dir\n";

  opendir IN, $dir;
  my @dir = readdir IN;
  closedir IN;

  foreach my $i (@dir) {
    next if ($i eq ".");
    next if ($i eq "..");

    if (-d "$dir/$i") {
      dodir("$dir/$i");
    } else {
      if ($i =~ /\.mmp$/) {
        lcfile("$dir/$i");
      } elsif ($i eq "bld.inf") {
        lcfile("$dir/$i");
      } elsif ($i =~ /\.pkg$/) {
        fixpkg("$dir/$i");
      }
    }
  }
}

sub lcfile($) {
  my $file = shift;
  
  open FHIN,"$file" || die("Can't read $file");
  open FHOUT,">$file.out" || die("Can't write to $file.out");

  while(my $line = <FHIN>) {
    $line =~ tr [A-Z] [a-z];
    $line =~ s/libgles_cm.lib/libGLES_CM.lib/;
    $line =~ s/libglesv2.lib/libGLESv2.lib/;
    $line =~ s/[\r\n]//g;
    print FHOUT "$line\n";
  }

  close(FHIN);
  close(FHOUT);
  unlink "$file";
  rename "$file.out", "$file";
}

sub fixpkg($) {
  my $file = shift;
  
  open FHIN,"$file" || die("Can't read $file");
  open FHOUT,">$file.out" || die("Can't write to $file.out");

  while(my $line = <FHIN>) {
    $line =~ s/[\r\n]*$/\r\n/;
    $line =~ s/^(\s*)"(.*)"(.*)-(.*)/$1"\L$2\E"$3-$4/; # lowercase local files for lines of the type "file"-"epocfile"
    $line =~ s/^(\s*)\{(.*)\}/$1\{\L$2\E\}/; # lowercase local files for lines of the type { "file1", "file2", "file3" } - "epocfile"
    if ($line =~ /^\{/ && $line !~ /\}/) { # take care of {}-blocks spanning more lines
      print FHOUT "$line";
      while ($line = <FHIN>) {
        $line =~ s/[\r\n]*$/\r\n/;
        if ($line =~ /\}/) {
          print FHOUT "$line";
          last;
        }
        $line =~ s/"(.*)"/\L$&/;
        print FHOUT "$line";
      }
      next;
    }
    print FHOUT "$line";
  }

  close(FHIN);
  close(FHOUT);
  unlink "$file";
  rename "$file.out", "$file";
}

die("Usage: fixexamples dir\n") if(@ARGV != 1);
dodir($ARGV[0]);
