#
#	vardump.pl - create or follow dynamic references
#
#	Daniel Smith, dansmith@autodesk.com, Mid Olympics, February 1992
#
#	reworked from Randal Shwartz's dumpvar.pl for SoftList

$cmds{"do_vardump"} = '&do_vardump';

package dumpvar;

# translate control chars to ^X - Randal Schwartz
sub unctrl {
    local($_) = @_;
    s/([\001-\037\177])/'^'.pack('c',ord($1)^64)/eg;
    $_;
}


# this eval's for %_main at the moment, but I intend to put an
# arg back in so that it may handle any package...
sub main'do_vardump {
    local(*stab) = eval("*_main");
    
    @all = keys(%stab);
    
    unless (open (PAGER, "| $ENV{'PAGER'}")) {
	warn "can't set up pager!: !$\n";
	return 1;
    }
    print PAGER <<"EOM";
    
    This is the current state of variables in SoftList...
    
    we have $#all entries....	
EOM
	    
    
    
    while (($key,$val) = each(%stab)) {
	{
	    next if @vars && !grep($key eq $_,@vars);
	    local(*entry) = $val;
	    if (defined $entry) {
		print PAGER "\$$key = '",&unctrl($entry),"'\n";
	    }
	    if (defined @entry) {
		print PAGER "\@$key = (\n";
		foreach $num ($[ .. $#entry) {
		    print PAGER "  $num\t'",&unctrl($entry[$num]),"'\n";
		}
		print PAGER ")\n";
	    }
	    
	    
	    
	    if ($key ne "_main" && $key ne "_DB" && defined %entry) {
		print PAGER "\%$key = (\n";
		foreach $key (sort keys(%entry)) {
		   print PAGER "  $key\t'",&unctrl($entry{$key}),"'\n";
		}
		print PAGER ")\n";
	    }
	}
    }
    close (PAGER);
    }

1;
