--- pkg_tree.orig	2001-12-12 11:44:40 UTC
+++ pkg_tree
@@ -26,7 +26,7 @@
 # updated by a newer version. In case of tcl-8.3.3_3, this is tcl-8.3.3_4.
 #
 # PKG-TREE is (c) Edwin Groothuis, edwin@mavetju.org
-# For license issues, see the file LICESE.
+# For license issues, see the file LICENSE.
 # For more information, see the website: http://www.mavetju.org
 #
 
@@ -34,31 +34,95 @@ use strict;
 
 use Getopt::Std;
 
-use vars qw/ $opt_v /;
+use vars qw/ $opt_b $opt_q $opt_t $opt_v /;
 
 $opt_v=0;
-getopts("v");
+$opt_t=0;
+$opt_b=0;
+$opt_q=0;
+getopts("bqtv");
+
+my @args=@ARGV;
+my $hasargs=$#ARGV>=0;
+
+my %required;	# this key is required by other packages
+my %requires;	# this key requires other packages
+my @dirs;
+my $pkg;
+
+`pkg -N 2>&1`;
+my $child_error_pkg_N = $?;
+
+if ($child_error_pkg_N == 0) {	# begin pkgng
+
+    my $re_trim = qr/^\s+|\s+$/o;
+    my $re_rtrim = qr/:\s*$/o;
+    my $re_pkg = qr/^\s+/o;
+    my $line;
+
+    $line = `pkg info -r -a`;
+    if ($? == 0) {
+	my @lines = split(/^/, $line);
+	$pkg = '';
+	foreach $line (@lines) {
+	    if ($line !~ $re_pkg) {
+		$pkg = $line;
+		$pkg =~ s/$re_rtrim//;
+		$required{$pkg}[0] = 0;
+	    } elsif ($pkg ne '') {
+		$line =~ s/$re_trim//g;
+		$required{$pkg}[++$required{$pkg}[0]] = $line;
+	    }
+	}
+    }
+
+    $line = `pkg info -d -a`;
+    if ($? == 0) {
+	my @lines = split(/^/, $line);
+	$pkg = '';
+	foreach $line (@lines) {
+	    if ($line !~ $re_pkg) {
+		$pkg = $line;
+		$pkg =~ s/$re_rtrim//;
+		$requires{$pkg}[0] = 0;
+	    } elsif ($pkg ne '') {
+		$line =~ s/$re_trim//g;
+		$requires{$pkg}[++$requires{$pkg}[0]] = $line;
+	    }
+	}
+    }
+
+    $line = `pkg info -q`;
+    if ($? == 0) {
+	@dirs = split(/^/, $line);
+	foreach $pkg (@dirs) {
+	    $pkg =~ s/$re_trim//g;
+	    unless (exists $required{$pkg}) {
+		$required{$pkg}[0] = 0;
+	    }
+	    unless (exists $requires{$pkg}) {
+		$requires{$pkg}[0] = 0;
+	    }
+	}
+    }
+
+}	# end pkgng
+elsif (-e '/usr/sbin/pkg_info') {	# begin pkg_install
 
 my $PKGDIR="/var/db/pkg";
 
 opendir DIR,$PKGDIR or die "Couldn't open $PKGDIR";
-my @dirs=readdir DIR;
+@dirs=readdir DIR;
 closedir DIR;
 
 @dirs=grep !/^\./,@dirs;
+@dirs=grep !/^pkgdb.db$/,@dirs;
 @dirs=sort @dirs;
 
-my @args=@ARGV;
-my $hasargs=$#ARGV>=0;
-
-my %required;	# this key is required by other packages
-my %requires;	# this key requires other packages
-
 #
 # Read from every package the +REQUIRED_BY file. This file contains
 # info about the packages which require this package.
 #
-my $pkg;
 foreach $pkg (@dirs) {
     $required{$pkg}[0]=0;
     if (open FILE,$PKGDIR."/".$pkg."/+REQUIRED_BY") {
@@ -101,6 +165,11 @@ foreach $pkg (@dirs) {
     }
 }
 
+}	# end pkg_install
+else {
+	die;
+}
+
 
 #
 # Print the dependancies (recursive) of the packages
@@ -150,8 +219,10 @@ foreach $pkg (@dirs) {
 	}
 	next if (!$found);
     }
+    next if ($opt_t && $required{$pkg}[0]!=0);
+    next if ($opt_b && $requires{$pkg}[0]!=0);
     print "$pkg\n";
-    if ($requires{$pkg}[0]!=0) {
+    if (!$opt_q && $requires{$pkg}[0]!=0) {
 	print_deps("|"," ",1,$pkg);
     }
 }
