Index: trunk/Ohana/etc/mkdist
===================================================================
--- trunk/Ohana/etc/mkdist	(revision 4761)
+++ trunk/Ohana/etc/mkdist	(revision 4807)
@@ -1,7 +1,28 @@
 #!/usr/bin/env perl
+
+$diff = 0;
+$list = 0;
+@tARGV = ();
+for (; @ARGV > 0; ) {
+    if ($ARGV[0] eq "-diff") {
+	$diff = 1;
+        shift; next;
+    }
+    if ($ARGV[0] eq "-list") {
+	$list = 1;
+        shift; next;
+    }
+    if ($ARGV[0] eq "-h")     { &usage (); }
+    if ($ARGV[0] eq "-help")  { &usage (); }
+    if ($ARGV[0] eq "--help") { &usage (); }
+    @tARGV = (@tARGV, $ARGV[0]);
+    shift;
+}
+@ARGV = @tARGV;
 
 $distdir = "distributions";
 
-if (@ARGV != 2) { die "USAGE: mkdist (group) (version)\n"; }
+if (!$list && @ARGV != 2) { &usage (); }
+if ( $list && @ARGV != 0) { &usage (); }
 
 @files = <$distdir/*.dst>;
@@ -13,5 +34,4 @@
     $Ns = @sublist;
     $Nt = @list;
-    print STDERR "read $Ns from $file, $Nt so far\n";
 }
 
@@ -23,4 +43,10 @@
 @tag = ();
 
+if ($list) { 
+    printf STDERR "Available Distributions\n";
+    printf STDERR "%-16s  %7s\n", "Module", "Version";
+    printf STDERR "-------------------------\n";
+}
+
 foreach $line (@list) {
 
@@ -31,6 +57,7 @@
 	($tmp, $word1, $word2) = split (" ", $line);
 	if (($word1 eq $group) && ($word2 eq $version)) { $ingroup = 1; }
+	if ($list) { printf STDERR "%-16s  %7s\n", $word1, $word2; }
     }
-    if (!$ingroup) { next; }
+    if (!$ingroup || $list) { next; }
 
     # found END
@@ -53,5 +80,8 @@
 }
 
+if ($list) { exit 0; }
 if (@name == 0) { die "ERROR: $group $version not found\n"; }
+
+if ($diff) { &difflist (); }
 
 for ($i = 0; $i < @name; $i++) {
@@ -78,2 +108,21 @@
 }
 
+sub usage {
+    print STDERR "USAGE: mkdist -list\n   : list valid distributions \n";
+    print STDERR "USAGE: mkdist (group) (version)\n   : make a distribution tarball\n";
+    print STDERR "USAGE: mkdist -diff (group) (version)\n";
+    print STDERR "   : show the difference between the distribution and current tree\n";
+    exit 2;
+}
+
+sub difflist {
+
+    for ($i = 0; $i < @name; $i++) {
+	if ($tag[$i] eq "") {
+	    &vsystem ("cvs -q rdiff -s -r HEAD $name[$i]");
+	} else {
+	    &vsystem ("cvs -q rdiff -s -r $tag[$i] $name[$i]");
+	}	
+    }
+    exit 0;
+}
