The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/nw/dist/prod/bin/perl -w

use strict;
use vars qw($running_under_some_shell);
use Envy::DB 2.19;

my $db = Envy::DB->new(\%ENV);
my ($loaded, $dimen) = $db->quick_status();

my %dmap;
my $dlen= length 'DIMENSION';
for my $d (keys %$dimen) {
    # must be one-to-one mapping
    $dmap{ $dimen->{$d} } = $d;
    $dlen = length $d if $dlen < length $d;
}

my $elen=0;
my @all = sort keys %$loaded;
for (@all) { $elen = length $_ if length $_ > $elen }

my $maxlevel=0;
my $fmt = '  %-'.$dlen."s | %s %s\n";

sub show {
    my ($m, $level) = @_;
    my $dim = exists $dmap{$m}? $dmap{$m} : '';
    printf($fmt, $dim, ' 'x($level*4), $m);
    for my $k (@all) {
	next if $loaded->{$k} ne $m;
	show($k, $level+1);
    }
}


my $dspace = ' '.'-'x($dlen+2).'+';
print $dspace.('-'x(75-length $dspace))."\n";
printf $fmt, 'DIMENSION', '', 'ENVIED';
print $dspace.('-'x(75-length $dspace))."\n";

for my $seniority (0..30) {  # should be dynamic XXX
    for my $m (@all) {
	next if $loaded->{$m} ne $seniority;
	show($m, 0);
    }
}
print $dspace.('-'x(75-length $dspace))."\n";