#!/usr/misc/.tcl/bin/wish -f
#
# This code is a slight modification of the demo browser included
# with the tcl release found in /alex/edu/berkeley/sprite/tcl
#       Vince Cate    
#
# This script generates a directory browser, which lists the working
# directory and allows you to open files or subdirectories by
# double-clicking.

# Create a scrollbar on the right side of the main window and a listbox
# on the left side.

scrollbar .scroll -command ".list yview"
listbox .list -yscroll ".scroll set" -relief raised -geometry 20x20
pack append . .scroll {right filly} .list {left expand fill}

# The procedure below is invoked to open a browser on a given file;  if the
# file is a directory then another instance of this program is invoked; if
# the file is a regular file then the Mx editor is invoked to display
# the file.

proc mybrowser {dir file} {
    if {[string compare $dir "."] != 0} {set file $dir/$file}

    puts stdout "$file"
    flush stdout


    if [file isdirectory $file] {
	exec mybrowser $file &

    } else {
        case $file {
           {*.gif}   {exec xloadimage $file       & }
           {*.gif.Z} {exec xloadimage $file       & }
           {*.pbm}   {exec xloadimage $file       & }
           {*.pbm.Z} {exec xloadimage $file       & }
           {*.ps}    {exec gv $file               & }
           {*.ps.Z}  {exec sh -c "zcat $file > /tmp/$$ ; gv /tmp/$$ ; rm -f /tmp/$$"  & }
           {*.PS}    {exec gv $file               & }
           {*.dvi}   {exec xdvi $file             & }
           {*.jpg}   {exec xv $file               & }
           {*.rle}   {exec getx11 $file           & }
           {*.au}    {exec cat $file > /dev/audio   }
           {*.au.Z}  {exec zcat $file > /dev/audio  }
           {default} {
                    if [file isfile $file] {
                        case $file {
                            {*.Z}     {exec sh -c "zcat $file > /tmp/$$ ; xedit /tmp/$$ ; rm -f /tmp/$$" &}
                            {default} {exec xedit $file &}
                        }
                    } else {
                        puts stdout "\"$file\" ERROR - probably symlink to nowhere " 
                        flush stdout
                    }
            }
        }
    }
}


# Fill the listbox with a list of all the files in the directory (run
# the "ls" command to get that information).

set endindex [string length $argv]
set lowindex [expr $endindex-14]
if {$lowindex < 0} {
   set lowindex 0
}
wm title . [string range $argv $lowindex end]

if $argc>0 {set dir [lindex $argv 0]} else {set dir "."}
foreach i [exec ls -a $dir] {
    .list insert end $i
}

# Set up bindings for the mybrowser.

bind .list <Control-q> {destroy .}
bind .list <Control-c> {destroy .}
focus .list
bind .list <Double-Button-1> {foreach i [selection get] {mybrowser $dir $i}}
bind .list <Button-2> {destroy .}
bind .list <Button-3> {destroy .}

