package ReportGen::Opts;
use strict;

# various command line options routines

require Exporter;
use ReportGen::Globs;

@ReportGen::Opts::ISA = qw ( Exporter );
@ReportGen::Opts::EXPORT = qw ( &ParseOpts &Opts2Str );

#
# parses command line options into a hash table
# returns a list of anonymous options, undef on error
#
sub ParseOpts {
	my ($opts, $anonym, @args) = @_;

	# process configuration file first
	my $cfg = GetCfg();

	foreach my $optName (keys %{$cfg}) {
		next unless exists $opts->{$optName};
		$opts->{$optName} = $cfg->{$optName}->{body};
	}

	@{$anonym} = () if $anonym;
	while (@args) {
		for (shift @args) {
			if (/^-/) {
				my $opt = $_;
				$opt =~ s/^-+//;
				if (!exists $opts->{$opt}) {
					warn("$0: unknown option `$_'\n");
					return undef();
				}
				$opts->{$opt} = shift @args;
			} else {
				push @{$anonym}, $_ if $anonym;
				last;
			}
		}
	}
	push @{$anonym}, @args if $anonym;
	return 1;
}

# converts options hash into a usage-like string
sub Opts2Str {
	my $opts = shift;
	my $res = %{$opts} ? "options and their defaults:\n" : '';
	foreach my $name (sort keys %{$opts}) {
		$res .= sprintf("    --%-30s %s\n",
			$name, $opts->{$name} || '[no default]');
	}
	$res .= %{$opts} ? 
		"note: defaults are overwritten by configuration file\n" : '';
	return $res;
}


syntax highlighted by Code2HTML, v. 0.9.1