package SimpleConf;
use Fcntl;
use strict;
require 5.003;
require Exporter;
@SimpleConf::ISA=qw(Exporter);
@SimpleConf::EXPORT=qw(loadconf showconf saveconf);


%SimpleConf::Confhash={};


sub SimpleConf::loadconf {
    my $infile=shift;
    my $iter3;
    my $iter2;
    my $iter;
    my $proto;
    my $host;
    my $rawconf=' ';
    open CONFH, $infile || die "Couldn't open $infile";
    (my $dev,my $ino,my $mode,my $nlink,my $uid,my $gid,my $rdev,my $size,
     my $atime,my $mtime,my $ctime,my $blksize,my $blocks)
	= stat(CONFH);
    read CONFH, $rawconf, $size;
    close CONFH;
    my @conf=grep {!/^#/} split(/\n/, $rawconf);
    my @confconf= grep {/^conf/} @conf;
    my %hash;
    for $iter (@confconf) {
	my @thisconf=split /:/,$iter;
	my $thisconf=@thisconf;
	$hash{conf}{$thisconf[1]}{size}=$thisconf-2;
	for $iter2 (1...$thisconf-2) {
	    $hash{conf}{$thisconf[1]}{$iter2}=$thisconf[$iter2+1];
	}
    }

    my $currparam;
    my @currparam;
    my @currline;
    for $iter (keys %{$hash{conf}}) {
	@currline=grep {/^$iter/} @conf;
	for $currparam (@currline) {
	    @currparam=split /:/, $currparam;
	    for $iter2 (1...$hash{conf}{$iter}{size}) {
		$hash{$iter}{$currparam[1]}{$hash{conf}{$iter}{$iter2}}
		=$currparam[$iter2];
	    }
	}
    }
    %SimpleConf::Confhash=%hash;
}

sub SimpleConf::saveconf {
    my $outfile=shift;
    my $iter;
    my $iter2;
    my $iter3;
    my $outstr;
    for $iter (keys %SimpleConf::Confhash) {
	for $iter2 (keys %{$SimpleConf::Confhash{$iter}}) {
	    $outstr="$outstr$iter";
	    if ($iter eq 'conf') {
		$outstr= "$outstr:$iter2";
		for $iter3 (1...$SimpleConf::Confhash{conf}{$iter2}{size}) {
		    $outstr ="$outstr:$SimpleConf::Confhash{conf}{$iter2}{$iter3}";
		}
	    } else {
		for $iter3 (1...$SimpleConf::Confhash{conf}{$iter}{size}) {
		    my $key=$SimpleConf::Confhash{conf}{$iter}{$iter3};
		    $outstr ="$outstr:$SimpleConf::Confhash{$iter}{$iter2}{$key}";
		}
	    }
	    $outstr="$outstr\n";
	}
    }
    open OUTFILE, "+>$outfile";
    print OUTFILE $outstr;
}





sub SimpleConf::showconf {
    my $iter;
    my $iter2;
    my $iter3;
    for $iter (keys %SimpleConf::Confhash) {
	print " type:$iter:\n";
	for $iter2 (keys %{$SimpleConf::Confhash{$iter}}) {
	    print "  name:$iter2:\n  ";
	    for $iter3 (keys %{$SimpleConf::Confhash{$iter}{$iter2}}) {
		length($SimpleConf::Confhash{$iter}{$iter2}{$iter3})==0 ||
		    print " {$iter3=$SimpleConf::Confhash{$iter}{$iter2}{$iter3}}";
	    }
	    print "\n";
	}
	print "\n";
    }
    print "\n";
}





