#!/usr/local/bin.sun4/perl5 -w use Tk; use Tk::Tree; use Sun::Solaris::Kstat; my $kstat = Sun::Solaris::Kstat->new(); $main=MainWindow->new; $main->geometry('=600x400'); my $progname = lc($main->title()); $main->title($progname); my $tree = $main->Scrolled('Tree', -separator=>':', -scrollbars=>'osoe',-font=>'arial',-bg=>'white'); $tree->pack(-side=>'left',-fill=>'both',-expand=>'1'); $tree->configure(-opencmd=>sub{expand( $tree, @_); } ); $tree->configure(-browsecmd=>sub{browse( $tree, @_); } ); $tree->configure(-closecmd=>sub{contract( $tree, @_); } ); $tree->add("kstat", -text=>'kstat',-image=>$main->Getimage("folder")); $tree->setmode("kstat", "open"); my $valwin = $main->Scrolled('HList', -header=>'1',-columns=>'2', -scrollbars=>'osoe',-font=>'arial',-bg=>'white'); $valwin->pack(-side=>'right',-fill=>'both',-expand=>'1'); $valwin->header('create', 0, -text=>'key'); $valwin->header('create', 1, -text=>'value'); my $leaf = ""; $main->repeat(100, \&update_labels); MainLoop; sub expand { my ($tree, $dir) = @_; $tree->entryconfigure($dir, -image=>$main->Getimage("openfolder")); if (my @kids = $tree->infoChildren( $dir ) ) { for my $kid (@kids) { $tree->show(-entry=>$kid); } return; } ($kpath = $dir) =~ s/^kstat:?//; my $blarf = $kstat; for $foo (split(/:/, $kpath)) { $blarf = $$blarf{$foo}; } for $foo (sort keys %$blarf) { $path = "${dir}:${foo}"; if (ref($$blarf{$foo})) { $tree->add($path, -text=>${foo},-image=>$main->Getimage("folder")); $isparent=0; $spinge = $$blarf{$foo}; for $bar (sort values %$spinge) { $isparent=1 if (ref($bar)); } $tree->setmode($path, ($isparent)?"open":"none"); } } } sub contract { my ($tree, $dir) = @_; $tree->entryconfigure($dir, -image=>$main->Getimage("folder")); Tk::Tree::CloseCmd($tree,$dir); } sub browse { my ($tree, $dir) = @_; $leaf = $dir; } sub update_labels { if ($leaf) { ($kpath = $leaf) =~ s/^kstat:?//; $main->title($progname." - ".$kpath) if ($kpath); $kstat->update(); my $blarf = $kstat; for $foo (split(/:/, $kpath)) { $blarf = $$blarf{$foo}; } $valwin->delete('all'); for $foo (sort keys %$blarf) { if (!ref($$blarf{$foo})) { $bogus = $valwin->addchild(""); $valwin->itemCreate($bogus, 0, -text=>$foo); $valwin->itemCreate($bogus, 1, -text=>$$blarf{$foo}); } } } else { $main->title($progname); } }