package RegIO;
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK);

use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(read_reginfo write_reginfo 
	     get_next_seqno get_current_seqno
	     );
@EXPORT_OK = qw();

#---------------------------------------------------------------------------
#
#
#
#---------------------------------------------------------------------------
sub write_reginfo {
    my ($outfile, $items) = @_;

    open(OUT, "> $outfile") or return 0;
    flock(OUT, 2);
    {
	foreach my $name (keys %{$items}) {
	    print OUT qq|$name = $items->{$name}\n|;
	}
    }
    close(OUT);
    chmod 0666, $outfile;

    return 1;
}

sub read_reginfo {
    my ($regfile, $items) = @_;

    (-e $regfile) or return 0;
#    open(REG, "< $regfile") or die "Open Error ($regfile) in read\n";
    open(REG, "< $regfile") or return 0;
    flock(REG, 1);
    while (<REG>) {
        chomp;
        s/#.*//;
        s/^\s+//;
        s/\s+$//;
        next unless length;
        my ($var, $value) = split(/\s*=\s*/, $_, 2);
        $items->{$var} = $value;
    }
    close(REG);

    return 1;	
}

#---------------------------------------------------------------------------
#
# Sequential Number
#
#---------------------------------------------------------------------------
sub get_next_seqno {
    my ($seqnofile) = @_;
    my $lockfile = $seqnofile.".LOCK";
    my $seqno = 0;

#    print($lockfile);
    open(LOCK, "> $lockfile") or die("error");
#    open(LOCK, "> ./logs/016") or die("error");
    flock(LOCK, 0);
    {
	if (-e $seqnofile) {
	    open(CNT, "< $seqnofile") or die  "($seqnofile)";
	    $seqno = <CNT>;
	    close(CNT);
	}

	$seqno++;
	open(CNT, "> $seqnofile") or die  "($seqnofile)";
	print CNT $seqno;
	close(CNT);
	chmod 0666, $seqnofile;
    }
    close(LOCK);
    chmod 0666, $lockfile;
    return $seqno;
}

sub get_current_seqno {
    my ($seqnofile) = @_;
    my $lockfile = $seqnofile.".LOCK";    
    my $seqno = 0;

    open(LOCK, "> $lockfile") or die "Open error ($lockfile)";
    flock(LOCK, 0);
    {
	if (-e $seqnofile) {
	    open(CNT, "< $seqnofile") or die  "($seqnofile)";
	    $seqno = <CNT>;
	    close(CNT);
	}
    }
    close(LOCK);
    chmod 0666, $lockfile;
    return $seqno;
}

1;
