set OdeCurrentLine 1

# Send a message to the ode server to do an integration
# widget - base hypertext widget

proc OdeDoIntegration { widget } {
global OdeCurrentLine
OdeServerSend "OdeSetParams [$widget.params.r1.entry get] \
                            [$widget.params.r2.entry get] \
                            [$widget.params.r3.entry get]"
set xydata [OdeServerSend "OdeIntegrate 0.0 {[$widget.initial.r1.entry get] \
                       [$widget.initial.r2.entry get]} \
                       [$widget.f3.step_size.entry get ] \
                       [$widget.f3.num_steps.entry get ] "]
$widget.xygraph insert line$OdeCurrentLine -xydata $xydata
incr OdeCurrentLine 1
}

# Clear the lines from the widget

proc OdeClearLines { widget } {
   global OdeCurrentLine
   for {set i 1} { $i < $OdeCurrentLine} {incr i 1} {
   $widget.xygraph delete line$i
}
set OdeCurrentLine 1
}

proc OdeMakeGraph {widget} {
  xygraph $widget.xygraph -relief raised -borderwidth 2 \
    -retrace true -xmin -10.0 -xmax 10.0 -ymin -10.0 -ymax 10.0 \
    -showlegend false
  bind $widget.xygraph <ButtonPress> "OdeSetInitial $widget \[%W locate %x %y\]"
  return $widget.xygraph
}
  
proc OdeSetInitial {widget values} {
  scan $values "%s %s" x y
  $widget.initial.r1.entry delete 0 end
  $widget.initial.r2.entry delete 0 end
  $widget.initial.r1.entry insert 0 $x
  $widget.initial.r2.entry insert 0 $y
}
  


proc OdeMakeEntry {widget framename nframes prompt} {
   frame $widget.$framename
   for {set i 1} {$i <= $nframes} {incr i 1} {
   pack append $widget.$framename \
     [frame $widget.$framename.r$i ] {top fillx}
   pack append $widget.$framename.r$i \
     [label $widget.$framename.r$i.label -text "$prompt #$i" ] {left} \
     [entry $widget.$framename.r$i.entry -relief sunken ] {right expand fillx}
  $widget.$framename.r$i.entry insert 0 0.0000
}
  return $widget.$framename
}

proc OdeMakeEntryFromList {widget framename list } {
frame $widget.$framename 
foreach i $list {
  pack append $widget.$framename \
     [frame $widget.$framename.$i ] {top fillx}
  pack append $widget.$framename.$i \
     [label $widget.$framename.$i.label -text "$i" ] {left} \
     [entry $widget.$framename.$i.entry -relief sunken ] {right expand fillx}
}
return $widget.$framename
}
