Blame demo/gpdemos.tcl

Packit 0986c0
#!/bin/sh
Packit 0986c0
# the next line restarts using wish \
Packit 0986c0
exec wish "$0" "$@"
Packit 0986c0
Packit 0986c0
# gpdemos.tcl --
Packit 0986c0
#
Packit 0986c0
# Demostration of gnuplot demos under Tcl/Tk.  Adapted from orignal
Packit 0986c0
# demo by D.M.Burns and image demo from Tcl/Tk.  To run under unix:
Packit 0986c0
# 
Packit 0986c0
#    unix> wish gpdemos.tcl
Packit 0986c0
#
Packit 0986c0
# or if gpdemos.tcl is changed to executable:
Packit 0986c0
#
Packit 0986c0
#    unix> gpdemos.tcl
Packit 0986c0
#
Packit 0986c0
# Starting directory for demos is taken from environmental variable
Packit 0986c0
# GNUPLOT_LIB.
Packit 0986c0
#
Packit 0986c0
#  9 Sep 2004 - Original demo, Donald M. Burns
Packit 0986c0
# 12 Sep 2004 - Enhanced to search directory for *.dem files.
Packit 0986c0
Packit 0986c0
# TAILOR THIS PATH IF NECESSARY
Packit 0986c0
set gnuplot    gnuplot
Packit 0986c0
Packit 0986c0
if {[info exists env(GNUPLOT_LIB)]} {
Packit 0986c0
        set gp_library $env(GNUPLOT_LIB)
Packit 0986c0
} else {
Packit 0986c0
        # the environment var isn't set, default to current directory
Packit 0986c0
        set gp_library .
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
set demopath $gp_library
Packit 0986c0
Packit 0986c0
eval destroy [winfo child .]
Packit 0986c0
Packit 0986c0
wm protocol . WM_DELETE_WINDOW safe_exit
Packit 0986c0
Packit 0986c0
# Open up a pipe to gnuplot
Packit 0986c0
set gpfd [open "|$gnuplot" w+]
Packit 0986c0
fconfigure $gpfd -buffering none -blocking 0
Packit 0986c0
Packit 0986c0
# A procedure to give commands to gnuplot
Packit 0986c0
proc gnuplot {a} {
Packit 0986c0
    global gpfd
Packit 0986c0
Packit 0986c0
    fileevent $gpfd writable [puts $gpfd $a]
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
# A procedure to clean-up on exit - this is broken for windows!
Packit 0986c0
proc safe_exit {} {
Packit 0986c0
    global gpfd
Packit 0986c0
Packit 0986c0
    set pids [pid $gpfd]
Packit 0986c0
    foreach pid $pids {
Packit 0986c0
	exec kill $pid
Packit 0986c0
    }
Packit 0986c0
    close $gpfd
Packit 0986c0
    exit
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
# loadDir --
Packit 0986c0
# This procedure reloads the directory listbox from the contents 
Packit 0986c0
# of the directory named in the demo's entry.
Packit 0986c0
proc loadDir {} {
Packit 0986c0
    global dirName
Packit 0986c0
Packit 0986c0
    .sel.f.list delete 0 end
Packit 0986c0
    foreach i [lsort [glob -nocomplain [file join $dirName *.dem]]] {
Packit 0986c0
	.sel.f.list insert end [file tail $i]
Packit 0986c0
    }
Packit 0986c0
    foreach i [lsort [glob -nocomplain [file join $dirName *.gp]]] {
Packit 0986c0
	.sel.f.list insert end [file tail $i]
Packit 0986c0
    }
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
# loadImage --
Packit 0986c0
# Given the name of the toplevel window of the demo and the mouse
Packit 0986c0
# position, extracts the directory entry under the mouse and loads
Packit 0986c0
# that file into a photo image for display.
Packit 0986c0
#
Packit 0986c0
# Arguments:
Packit 0986c0
# x, y-			Mouse position within the listbox.
Packit 0986c0
proc loadDemo {x y} {
Packit 0986c0
    global dirName
Packit 0986c0
    global gpfd
Packit 0986c0
Packit 0986c0
    # Send an ctrl-C to gnuplot in case a different demo is running.
Packit 0986c0
    exec kill -INT [pid $gpfd]
Packit 0986c0
Packit 0986c0
    set file [file join $dirName [.sel.f.list get @$x,$y]]
Packit 0986c0
    puts stderr "Loading demo $file"
Packit 0986c0
Packit 0986c0
    # Some demos may have set terminal and failed to set it back.
Packit 0986c0
    gnuplot "\nset term x11; reset; load \"$file\""
Packit 0986c0
}
Packit 0986c0
Packit 0986c0
set font {Helvetica 11}
Packit 0986c0
Packit 0986c0
wm title . "Tcl/Tk Gnuplot Demonstration"
Packit 0986c0
wm iconname . "Tcl/Tk GP"
Packit 0986c0
Packit 0986c0
frame .sel
Packit 0986c0
frame .sep -relief ridge -bd 1 -width 2
Packit 0986c0
frame .plt
Packit 0986c0
pack .sel -side left -fill y -padx 10 -pady 10 -expand no
Packit 0986c0
pack .sep -side left -fill y -expand no
Packit 0986c0
pack .plt -side right -fill both -expand yes -padx 10 -pady 10
Packit 0986c0
Packit 0986c0
label .sel.msg -font $font -wraplength 150 -justify left -text "This is an example of using gnuplot to draw into an X window opened by an external application. It allows you to run the demo listed demo scripts individually."
Packit 0986c0
pack .sel.msg -side top
Packit 0986c0
Packit 0986c0
## Create selection side of window
Packit 0986c0
frame .sel.buttons
Packit 0986c0
pack .sel.buttons -side bottom -fill both -expand no
Packit 0986c0
button .sel.buttons.quit -text Quit -command "safe_exit"
Packit 0986c0
pack .sel.buttons.quit -side left -expand 1 -fill both
Packit 0986c0
#
Packit 0986c0
label .sel.dirLabel -text "Directory:"
Packit 0986c0
set dirName [file join $gp_library]
Packit 0986c0
entry .sel.dirName -textvariable dirName
Packit 0986c0
bind .sel.dirName <Return> "loadDir"
Packit 0986c0
frame .sel.spacer1 -height 3m
Packit 0986c0
label .sel.fileLabel -text "File:"
Packit 0986c0
frame .sel.f
Packit 0986c0
frame .sel.spacer2 -height 2m
Packit 0986c0
pack .sel.dirLabel -side top -anchor w
Packit 0986c0
pack .sel.dirName -side top -fill x
Packit 0986c0
pack .sel.spacer1 .sel.fileLabel -side top -anchor w
Packit 0986c0
pack .sel.f -fill both -expand 1
Packit 0986c0
pack .sel.spacer2 -side top
Packit 0986c0
#
Packit 0986c0
listbox .sel.f.list -yscrollcommand ".sel.f.scroll set"
Packit 0986c0
scrollbar .sel.f.scroll -command ".sel.f.list yview"
Packit 0986c0
pack .sel.f.list -side left -fill both -expand 1
Packit 0986c0
pack .sel.f.scroll -side right -fill y -expand 0
Packit 0986c0
bind .sel.f.list <Double-1> "loadDemo %x %y"
Packit 0986c0
Packit 0986c0
## Run load directory routine to fill list box
Packit 0986c0
loadDir
Packit 0986c0
Packit 0986c0
## Create the plot side of window
Packit 0986c0
frame .plt.g -bg "" -width 640 -height 450
Packit 0986c0
frame .plt.spacer2 -height 2m
Packit 0986c0
frame .plt.buttons
Packit 0986c0
button .plt.buttons.bnext -text Next -command {gnuplot ""}
Packit 0986c0
button .plt.buttons.bstop -text Reset -command {exec kill -INT [pid $gpfd]; gnuplot "\nreset; clear"}
Packit 0986c0
#
Packit 0986c0
pack .plt.buttons.bnext .plt.buttons.bstop -side left -expand 1
Packit 0986c0
pack .plt.buttons -side bottom -fill both -expand no
Packit 0986c0
pack .plt.spacer2 -side bottom
Packit 0986c0
pack .plt.g -side top -expand true -fill both
Packit 0986c0
Packit 0986c0
# Tell gnuplot to use our frame .plt.g for display
Packit 0986c0
gnuplot "set term x11 window '[winfo id .plt.g]'"
Packit 0986c0
gnuplot "clear"