|
|
|
@ -12,19 +12,32 @@ use strict;
|
|
|
|
|
my @arg;
|
|
|
|
|
my $PREFIX = "CONFIG_";
|
|
|
|
|
|
|
|
|
|
sub load_config($) {
|
|
|
|
|
sub set_config($$$$) {
|
|
|
|
|
my $config = shift;
|
|
|
|
|
my $idx = shift;
|
|
|
|
|
my $newval = shift;
|
|
|
|
|
my $mod_plus = shift;
|
|
|
|
|
|
|
|
|
|
if (!defined($config->{$idx}) or !$mod_plus or
|
|
|
|
|
$config->{$idx} eq '#undef' or $newval eq 'y') {
|
|
|
|
|
$config->{$idx} = $newval;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub load_config($$) {
|
|
|
|
|
my $file = shift;
|
|
|
|
|
my $mod_plus = shift;
|
|
|
|
|
my %config;
|
|
|
|
|
|
|
|
|
|
open FILE, "$file" or die "can't open file";
|
|
|
|
|
while (<FILE>) {
|
|
|
|
|
chomp;
|
|
|
|
|
/^$PREFIX(.+?)=(.+)/ and do {
|
|
|
|
|
$config{$1} = $2;
|
|
|
|
|
set_config(\%config, $1, $2, $mod_plus);
|
|
|
|
|
next;
|
|
|
|
|
};
|
|
|
|
|
/^# $PREFIX(.+?) is not set/ and do {
|
|
|
|
|
$config{$1} = "#undef";
|
|
|
|
|
set_config(\%config, $1, "#undef", $mod_plus);
|
|
|
|
|
next;
|
|
|
|
|
};
|
|
|
|
|
/^#/ and next;
|
|
|
|
@ -111,14 +124,13 @@ sub dump_config($) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub parse_expr($);
|
|
|
|
|
|
|
|
|
|
sub parse_expr($) {
|
|
|
|
|
sub parse_expr {
|
|
|
|
|
my $pos = shift;
|
|
|
|
|
my $mod_plus = shift;
|
|
|
|
|
my $arg = $arg[$$pos++];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
die "Parse error" if (!$arg);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($arg eq '&') {
|
|
|
|
|
my $arg1 = parse_expr($pos);
|
|
|
|
|
my $arg2 = parse_expr($pos);
|
|
|
|
@ -129,7 +141,7 @@ sub parse_expr($) {
|
|
|
|
|
return config_add($arg1, $arg2, 0);
|
|
|
|
|
} elsif ($arg =~ /^m\+/) {
|
|
|
|
|
my $arg1 = parse_expr($pos);
|
|
|
|
|
my $arg2 = parse_expr($pos);
|
|
|
|
|
my $arg2 = parse_expr($pos, 1);
|
|
|
|
|
return config_add($arg1, $arg2, 1);
|
|
|
|
|
} elsif ($arg eq '>') {
|
|
|
|
|
my $arg1 = parse_expr($pos);
|
|
|
|
@ -140,7 +152,7 @@ sub parse_expr($) {
|
|
|
|
|
my $arg2 = parse_expr($pos);
|
|
|
|
|
return config_sub($arg1, $arg2);
|
|
|
|
|
} else {
|
|
|
|
|
return load_config($arg);
|
|
|
|
|
return load_config($arg, $mod_plus);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|