#----------------------------------------------------------------------------
# suchscan : a very fast scan. A motor is set to run, the counter is started
# and the counter read as fast as possible. Current motor position and
# counts are printed. For quick and dirty location of peaks.
#
# Mark Koennecke, October 1998
#---------------------------------------------------------------------------

proc scGetNum { text } {
	set list [split $text =]
        return [lindex $list 1]
}


# set the counter name
set ctr counter

#----------- check if var still driving
proc runtest {var } {
     set t [listexe]
     if {[string first $var $t] >= 0} {
       return 1
     } else {
       return 0
     }
}
#-------------------------- the actual susca
proc susca args {
     global ctr
     if {[llength $args] < 4} {
       ClientPut "USAGE: susca var start length time"
       error "ERROR: Insufficient number of arguments to susca" 
     } 
#------ drive to start position
     set var [lindex $args 0]
     set start [lindex $args 1]
     set end [lindex $args 2]
     set ctime [lindex $args 3]
     set ret [catch {drive $var $start} msg]
     if {$ret != 0 } {
         error "ERROR: $msg"
     }
     set last 0
#------- start counter
     $ctr setmode timer
     $ctr countnb $ctime
#-------- start motor
     set ret [catch {run $var $end} msg]
     if {$ret != 0 } {
         error "ERROR: $msg"
     }
#------ scan loop
     while {[runtest $var] == 1}  {
       set ct [scGetNum [$ctr getcounts]]
       set ncts [expr abs($ct - $last)]
       set last $ct
       set vp [scGetNum [$var]]
       ClientPut [format "%8.2f %12.2f" $vp $ncts]
     }
     ClientPut "OK"
}

