use warnings;
our (@funcs);
our (@vars);
our (%values);
while (<>) {
chomp;
s/#.*//;
next if /^\s*$/;
my ($dist) = /^(.+):\s*$/ or die;
@funcs = ();
@vars = ();
%values = ('P' => [.01, .1, .2, .3, .4, .5, .6, .7, .8, .9, .99]);
while (<>) {
last if /^\s*$/;
my ($key, $value) = /^\s*(\w+)\s*=\s*(.*)$/;
my (@values);
foreach my $s (split (/\s+/, $value)) {
if (my ($from, $to, $by) = $s =~ /^(.*):(.*):(.*)$/) {
for (my ($x) = $from; $x <= $to; $x += $by) {
push (@values, sprintf ("%.2f", $x) + 0);
}
} else {
push (@values, $s);
}
}
if ($key eq 'funcs') {
@funcs = @values;
} else {
push (@vars, $key);
$values{$key} = \@values;
}
}
print "DATA LIST LIST/", join (' ', 'P', @vars), ".\n";
print "COMPUTE x = IDF.$dist (", join (', ', 'P', @vars), ").\n";
foreach my $func (@funcs) {
print "COMPUTE $func = $func.$dist (",
join (', ', 'x', @vars), ").\n";
}
print "PRINT OUTFILE='$dist.out'/",
join (' ', 'P', @vars, 'x', @funcs), ".\n";
print "BEGIN DATA.\n";
print_all_values (['P', @vars], []);
print "END DATA.\n";
}
sub print_all_values {
my (@vars) = @{$_[0]};
my (@assign) = @{$_[1]};
if (@vars == @assign) {
print join (' ', @assign), "\n";
} else {
push (@assign, 0);
my ($var) = $vars[$#assign];
foreach my $value (@{$values{$var}}) {
$assign[$#assign] = $value;
print_all_values (\@vars, \@assign);
}
}
}
syntax highlighted by Code2HTML, v. 0.9.1