################################################################
# proc scaleValue {val min max minOut maxOut} }--
#    scale a value to fit between the min and max values
# Arguments
#   val		The raw data
#   min		The minimum input value
#   max		The maximum input value
#   minOut	The minimum output value
#   maxOut	The maximum output value
# 
#   RETURN      (maxOut - minOut)
#   ___     =   -----------
#   val         (max - min)
#
#  RETURN = val * (maxOut - minOut) / (max - min)
# Results
#   No side effects.
# 
proc scaleValue {val min max minOut maxOut} {
  set rangeOut [expr {$maxOut - $minOut}]
  set rangeIn  [expr {$max- $min}]
  set zeroOriented [expr {($val-$min) * $rangeOut / $rangeIn}]
  return [expr {$zeroOriented+$minOut}]
}

proc drawXaxis {cvs min max xMargin yMargin stepSize} {
  set cvswidth [$cvs cget -width]
  set cvsheight [$cvs cget -height]
  
  set ytext [expr {$cvsheight - $yMargin}]
  for {set x [expr {$stepSize * ($min / $stepSize)}]} \
      {$x < $max} {incr x $stepSize} {
    set xpos [scaleValue $x $min $max $xMargin $cvswidth]
    $cvs create text $xpos $ytext -text $x -anchor n
    $cvs create line $xpos $ytext $xpos 10 -fill gray
  }
}

proc drawYaxis {cvs min max xMargin yMargin stepSize} {
  set cvswidth [$cvs cget -width]
  set cvsheight [$cvs cget -height]
  
  set ytext [expr {$cvsheight - $yMargin}]
  for {set y [expr {$stepSize * ($min / $stepSize)}]} \
      {$y < $max} {incr y $stepSize} {

    set ypos [scaleValue $y $min $max $yMargin $cvsheight]
    set ypos [expr {$cvsheight-$ypos}]
    $cvs create line $xMargin $ypos $cvswidth $ypos -fill gray
    $cvs create text [expr {$xMargin-5}] $ypos -text $y -anchor e
  }
}

################################################################
# proc makeBetterStep {orig}--
#    Constrain a number to 1, 2, 5 or 10 if < 10
#    or a multiple of 5 or 10 if > 10.
# Arguments
#   orig	The original number
# 
# Results
#   No side effects
# 
proc makeBetterStep {orig} {

  set int [string range $orig end end]

  set add 0
  if {($orig < 10) && ($int > 2) && ($int < 5)} {
    set add [expr {5 - $int}]
  } elseif {($int > 0) && ($int < 5)} {
   # Add a value to move to multiple of 5
    set add [expr {5 - $int}]
  } elseif {($int > 5)} {
    # Add a value to move to multiple of 10
    set add [expr {10 - $int}]
  }
  return [expr {$orig + $add}]
}

