#!/bin/sh
# comment \
exec wish "$0" "$@"

# Set path to gnuplot on windows, if required
if { $tcl_platform(platform) eq "windows"} {
  # If gnuplot isn't in the path, then guess location and add to path
  if { [auto_execok gnuplot] eq "" } {
    # Path to mgnuplot executable
    set mypath [file dirname $argv0]
    # gnuplot.exe location relative to mgnuplot.exe in windows installer
    set gnuplotpath [file normalize "${mypath}/../../../../gnuplot/bin"]
    set ::env(PATH) "$::env(PATH);$gnuplotpath"
  }
}

#set gnuPlotstream [open {|  gnuplot /d19/staff/wfs/tmp/jo } w]
set gnuPlotstream [open {|  gnuplot  } r+]


proc sendgnu com {
    global gnuPlotstream
    puts stdout $com ; flush stdout
    puts $gnuPlotstream $com ; flush $gnuPlotstream
}

set ii 0
while {$ii < $argc} {
 switch -exact "X[lindex $argv $ii]"  {
    X-parametric3d {
    sendgnu "set parametric\n" 
    sendgnu "set data style lines\n"
    sendgnu "set hidden\n"
    set ii [expr {$ii + 1}]
    sendgnu "splot '[lindex $argv $ii]'\n" }
    X-plot2d {
    set ii [expr {$ii + 1}]
    sendgnu "set data style lines"
    sendgnu "plot '[lindex $argv $ii]'\n" 
    }
    X-title {
    set ii [expr {$ii + 1}]
    sendgnu "set title '[lindex $argv $ii]'\n" }
    
    }
    set ii [expr {$ii +1}]
    }
      
set xrot 60
set zrot 30


text .text
.text configure -height 4 -width 40

proc getoptions {} {
#    unlink gnu-optionsxx
    set tmp gnu-optionsxx
    file delete -force $tmp
    sendgnu "save '$tmp'\n"
    # 50 ms delay in loop is arbitrary, was "exec sleep 0"
    while {[file exists $tmp] <= 0} {after 50}
    set at [.fra.options nearest 0]
    set f [ open gnu-optionsxx ]
    .fra.options delete 0 end
    while { [gets $f line] >= 0 } {
	.fra.options insert end [lrange $line 0 end ]}
    .fra.options yview $at	
    }

frame .fra -bd 2
label .fra.label -text "Current Set Options"
scrollbar .fra.scroll -command ".fra.options yview"    
listbox .fra.options -yscrollcommand ".fra.scroll set" -relief sunken -bd 2
pack .fra.label
pack .fra.options -side left
pack .fra.scroll -side right -fill y
bind .fra.options <Double-1> "set selected_option  \[lindex \[selection get\] 0\]"
frame .option_edit

proc msg a {global $a
 sendgnu [format "%s\n\nreplot\n" [expr $$a]] ;
 set $a ""
 getoptions}
 
proc mkOption_edit {a b} {
    global $b
   label $a.label -text "Edit: "
   entry $a.entry -width 20 -relief sunken -bd 2 -textvariable $b
    bind $a.entry  <Return> "msg  $b"
   pack $a.label $a.entry -side left -padx 1m -pady 2m
}

mkOption_edit .option_edit selected_option


getoptions

button .exit -text "Exit" -command {
    sendgnu  "exit\n"
    destroy .
}

button .save -text "save gnuplot.out" -command {
    sendgnu "save 'gnuplot.out'\n"
 }

scale .rotxscale -label "xrotation"  \
   -orient horizontal -length 200 -from 0 -to 180 \
    -command gnuPlotsetview -tickinterval 60
scale .rotzscale -label "zrotation" \
    -orient horizontal -length 200 -from 0 -to 360 \
    -command gnuPlotsetview -tickinterval 120

set initted 0
.rotxscale set $xrot
.rotzscale set $zrot

proc gnuPlotsetview value  {
    global initted
    if { $initted < 2 } { set initted [expr {$initted + 1}]} \
    else \
    {sendgnu [format "set view %d,%d\nreplot\n" [.rotxscale get] [.rotzscale get]]}}

pack .exit   .rotxscale .rotzscale .fra .option_edit .save


