#!/usr/bin/perl

use FindBin;

sub get_hlvm_dir 
{
  my $hlvmdir = $FindBin::Bin;
  my $index = rindex($hlvmdir, "/utils/bin");
  return substr($hlvmdir,0,$index);
}

sub process_file
{
  my $preamble = shift(@_);
  my $input  = shift(@_);
  my $output = shift(@_);
  my $line   = "";
  my $hlvmdir = get_hlvm_dir();

  chomp($MODULE_PATH = `pwd`);
  $MODULE_PATH = substr($MODULE_PATH,rindex($MODULE_PATH,"/hlvm/")+6); 
  $MODULE = $MODULE_PATH;
  $MODULE =~ s|\/|_|g;

  ($sec,$min,$hour,$mday,$mon,$year) = localtime(time);

  local $YEAR = $year + 1900;
  local $DATE = sprintf("%4d/%02d/%02d", $YEAR, $mon + 1, $mday );
  local $TIME = sprintf("%02d:%02d:%02d", $hour, $min, $sec);

  local $AUTHOR = $ENV{XPS_AUTHOR};
  if ( length($AUTHOR) < 5 )
  {
      $AUTHOR = $ENV{AUTHOR};
      if (length($AUTHOR) < 5)
      {
          $AUTHOR = getpwuid($<);
          if (length($AUTHOR) < 1 )
          {
              $AUTHOR = $ENV{USER};
              if (length($AUTHOR) < 1)
              {
                  $AUTHOR = $ENV{LOGNAME};
                  if (length($AUTHOR) < 1)
                  {
                      $AUTHOR = "Author Unknown";
                  }
              }
          }
      }
  }

  local $NAMESPACE 	= "HLVM_$MODULE";
  local $module_header 	= ucfirst($MODULE);
  local $MODULE_INCLUDE = "<hlvm/$MODULE/${module_header}.h>";
  local $CLASS_INCLUDE	= "<hlvm/$MODULE/${CLASS}.h>";
  local $NAMESPACE_UC 	= uc( $NAMESPACE );
  local $CLASS_UC 	= uc( $CLASS );
  local $HEADER_UC   	= uc( $HEADER );

  open ( OUT,"> $output" ) || die ("Couldn't open $output for writing\n");

  for $infile ( $preamble , $input )
  {
      open ( IN, "< $infile" ) || die ("Couldn't open $infile for reading\n");

      while ( defined($line = <IN>) )
      {
          $line =~ s/\%ID\%/\$Id\$/g;
          $line =~ s/\%LOG\%/\$Log\$/g;
          $line =~ s/\%AUTHOR%/$AUTHOR/g;
          $line =~ s/\%USER%/$USER/g;
          $line =~ s/\%DATE%/$DATE/g;
          $line =~ s/\%TIME%/$TIME/g;
          $line =~ s/\%YEAR%/$YEAR/g;
          $line =~ s/\%MODULE%/$MODULE/g;
          $line =~ s/\%NAMESPACE\%/$NAMESPACE/g;
          $line =~ s/\%NAMESPACE_UC\%/$NAMESPACE_UC/g;
          $line =~ s/\%CLASS\%/$CLASS/g;
          $line =~ s/\%CLASS_UC\%/$CLASS_UC/g;
          $line =~ s/\%MODULE_PATH\%/$MODULE_PATH/g;
          $line =~ s/\%MODULE\%/$MODULE/g;
          $line =~ s/\%HEADER\%/$HEADER/g;
          $line =~ s/\%HEADER_UC\%/$HEADER_UC/g;
          $line =~ s/\%STYLE\%/$STYLE/g;
          $line =~ s/\%CLASS_INCLUDE\%/$CLASS_INCLUDE/g;
          $line =~ s/\%MODULE_INCLUDE\%/$MODULE_INCLUDE/g;
          $line =~ s/\%TOKEN_LIST\%/$TOKEN_LIST/g;
          $line =~ s/\%SCHEMA_NAME\%/$SCHEMA_NAME/g;

          print OUT $line || die ("Couldn't write to OUT file\n");
      }
      close IN;
  };

  close OUT;
}

1;
