#!/usr/bin/perl

# This script takes as STDIN an output from the regFixer.pl
# and reformat the file as if it would have been exported from the registry
# in the "REGEDIT4" format.
#
# Copyright 1999 Sylvain St-Germain
# Copyright 2002 Andriy Palamarchuk
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

use strict;
use diagnostics;

# I do not validate the integrity of the file, I am assuming that
# the input file comes from the output of regFixer.pl, therefore things
# should be ok, if they are not, submit a bug

my $curr_key = "";
my $key;
my $value;
my $rest;
my $s;

print "REGEDIT4\n";

LINE: while($s = <>) {
  chomp($s);			    # get rid of new line

  next LINE if($s =~ /^$/);         # this is an empty line

  if ($s =~ /\]$/)                  # only key name on the line
  {
      ($key) = ($s =~ /^\[(.*)\]$/);
      unless ($key)
      {
	  die "Unrecognized string $s";
      }
      if ($key ne $curr_key)
      {
	  $curr_key = $key;
	  print "\n[$key]\n";
      }
  }
  else
  {
      ($key, $value) = ($s =~ /^\[(.*?)\](.+)$/);
      if (!defined($key))
      {
	  die "Unrecognized string $s";
      }
      if ($key ne $curr_key)	   #curr_key might got chopped from regSet.sh
      {
          print "\n[$key]\n";
      }
      print "$value\n"
  }
}
