#!./mofeperl

$dir = '/u/neumann/wafe';

&wafe_cmd(<<'__');

mergeResources topLevel \
        *XsTree*XmPushButton.fontList \
            -*-helvetica-medium-o-normal-*-12-*-iso8859-1 \
        *XmPushButtonGadget*fontList  \
            -*-helvetica-medium-r-normal-*-12-*-iso8859-1 \
        *XsTree*XmLabel.fontList \
            -*-helvetica-medium-o-normal-*-12-*-iso8859-1 \
        *XsTree*XmPushButton*background lightblue \
        *XsTree*XmLabel*background yellow \
        *XsTree*XmFrame*background yellow \
        *menu_bar*background gray75 \
        *.background green \
        *.foreground black

XmMainWindow main topLevel
 XmMenuBar menu_bar main
    XmPulldownMenu mpa menu_bar unmanaged
      XmPushButtonGadget Quit mpa activateCallback quit
    XmCascadeButton Actions menu_bar subMenuId mpa

    XmPulldownMenu mph menu_bar unmanaged
      XmPushButtonGadget Help mph activateCallback "manageChild helpbox"
    XmCascadeButton Help menu_bar subMenuId mph
    sV menu_bar menuHelpWidget Help

XmMessageDialog helpbox Help unmanaged \
        dialogTitle "$argv0 Help" okLabelString "Close" messageString "
 This perl programs shows files in a directory
 using the Motif Tree Widget (written by Douglas Young)

 Peter Sylvester (C) Copyright EdelWeb France 1995"
  unmanageChild \
        [XmMessageBoxGetChild helpbox DIALOG_CANCEL_BUTTON] \
        [XmMessageBoxGetChild helpbox DIALOG_HELP_BUTTON]
XmScrolledWindow s main  scrollingPolicy AUTOMATIC height 500 width 500
XsTree t s

sV main workWindow s

realize
__

$nodecnt = 0;

sub setnode {
	local($this,$parent,$parentdir,$nocallback) = @_;
        if ($parent ne "") {$parent = "superNode $parent"}
        $nodecnt++;
#        print "$this $parent $parentdir\n";
        if ($nocallback == 1) {
                &wafe_cmd("XmFrame frame$nodecnt t $parent");
		&wafe_cmd("XmLabel entry$nodecnt frame$nodecnt labelString \"$this : $parentdir\"");
        } elsif ($nocallback == 2) {
              &wafe_cmd("XmPushButton entry$nodecnt t labelString \"$this\"  $parent")
        } else {
#                &wafe_cmd("XmRowColumn frame$nodecnt t  orientation HORIZONTAL packing PACK_TIGHT $parent");
#  		&wafe_cmd("XmLabel pix$nodecnt frame$nodecnt labelPixmap dir.xbm");
             local($background) ='';
 	     if (-l "$parentdir$this") {$background = 'background pink'}

             elsif (-e "$parentdir$this/index.html") {
    $background = 'background yellow'}
             &wafe_cmd("XmPushButton entry$nodecnt t $background labelString \"$this\"  activateCallback \"perl setdir $this entry$nodecnt $parentdir\" $parent")
        }
        return("entry$nodecnt");
}

sub setdir {
   local($dir,$parent,$parentdir) = @_;
   local($entry,@fl) ;
#   print "expanding $dir in $parentdir \n";

   unless ($expanded{"$parentdir$dir"}) {
      $expanded{"$parentdir$dir"} = 1;
   if (opendir(THISDIR,"$parentdir$dir")) {

    &wafe_cmd("unmanageChild t;setBusy main true");
     while ($entry = readdir(THISDIR)) {
       if (($entry ne '.') && ($entry ne '..')) {
          if (-d "$parentdir$dir/$entry") {
          	&setnode($entry,$parent,"$parentdir$dir/")
          } elsif (-f "$parentdir$dir/$entry") {
             push(@fl,$entry)
          } elsif (-l "$parentdir$dir/$entry") {
           	&setnode("$entry ",$parent,readlink("$parentdir$dir/$entry"),1)
         } else  {
          	&setnode("-? - $entry ",$parent,"$parentdir$dir/",2)
          }
       }
     }
     closedir(THISDIR)
   }
   if ($#fl >= 0) {
       $nodecnt++;
        local($rc) = "entry$nodecnt";
      &wafe_cmd("XmFrame frame$rc t superNode $parent");
       &wafe_cmd("XmRowColumn $rc frame$rc orientation VERTICAL packing PACK_TIGHT");
      foreach $f (@fl) {
         $nodecnt++;
        local($background) = '' ;
	stat("$parentdir$dir/$f");
        if ($f =~ /.*\.html/) {$background = 'background lightblue' }
        elsif ($f =~ /.*\.gif/) {$background = 'background pink' }
        else {if (-u _) {$background = 'background magenta' }
        if (-g _) {$background = 'background magenta' }
        if (-x _) {$background = 'background magenta' }
       if (-B _) {$background = 'background pink' }
       if (-X _) {$background = 'background magenta' }
       }
         &wafe_cmd("XmLabel entry$nodecnt $rc $background labelString \"$f\"")
      }
   }
    &wafe_cmd("manageChild t;setBusy main false");
   }

}

$p = &setnode($dir,"","/");

# calling the xt event loop
&wafe_process_events();

