#!/bin/sh  
# \
exec oagtclsh "$0" "$@"

# $Log: not supported by cvs2svn $

set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]
APSStandardSetup

set rootname monitorTemplate
set usage "usage: makeSlowBeamMotionTemplate \[-output <filename> | -install 1\]"
set output ""
set install 0
set args $argv
if {[APSStrictParseArguments {output install}] || \
      (![string length $output] && !$install) || \
      ([string length $output] && $install)} {
    puts stderr "Error for $argv0 in [pwd]: $usage"
    exit 1
}

if !$install {
    if [file exists $output] {
        puts stderr "Error for $argv0 in [pwd]: $output exists"
        exit 1
    }
} else {
    set lastFile [lindex [lsort [glob $rootname.sdds-????]] end]
    set output [APSNextGenerationedName -name $lastFile -newFile 1]
}

set fid [sdds open $output w]
sdds defineColumn $fid ControlName -type SDDS_STRING
sdds defineColumn $fid ReadbackName -type SDDS_STRING
sdds defineColumn $fid ReadbackUnits -type SDDS_STRING
sdds writeLayout $fid
sdds startPage $fid [expr 360*20]

set ControlName ""
set ReadbackName ""
set ReadbackUnits ""
set CNxSuffixList {:<msType>:x }
set CNySuffixList {:<msType>:y }
set RNxSuffixList {:<msType>:x }
set RNySuffixList {:<msType>:y }
set UnitsList {mm}

# x plane
set dataDir /home/helios/oagData/sr/BPMStatus
if [catch {exec sddsprocess $dataDir/config.sdds -pipe=out \
             -filter=col,NonexistentH,0,0,OkForLoggingH,1,1,& \
             | sdds2stream -col=DeviceName -pipe \
         } xBPMs] {
    puts stderr "Error for $argv0 in [pwd]: $xBPMs"
    exit 1
}
if [catch {exec sddsprocess $dataDir/config.sdds -pipe=out \
             -filter=col,NonexistentV,0,0,OkForLoggingV,1,1,& \
             | sdds2stream -col=DeviceName -pipe \
         } yBPMs] {
    puts stderr "Error for $argv0 in [pwd]: $yBPMs"
    exit 1
}

foreach bpm $xBPMs {
    set items [llength $CNxSuffixList]
    for {set index 0} {$index<$items} {incr index} {
        lappend ControlName ${bpm}[lindex $CNxSuffixList $index]
        lappend ReadbackName ${bpm}[lindex $RNxSuffixList $index]
        lappend ReadbackUnits [lindex $UnitsList $index]
    }
}
foreach bpm $yBPMs {
    set items [llength $CNxSuffixList]
    for {set index 0} {$index<$items} {incr index} {
        lappend ControlName ${bpm}[lindex $CNxSuffixList $index]
        lappend ReadbackName ${bpm}[lindex $RNxSuffixList $index]
        lappend ReadbackUnits [lindex $UnitsList $index]
    }
}

eval sdds setColumn $fid ControlName $ControlName
eval sdds setColumn $fid ReadbackName $ReadbackName
eval sdds setColumn $fid ReadbackUnits $ReadbackUnits
sdds writePage $fid
sdds close $fid

if $install {
    if [file exists ${rootname}.sdds] {
        if [catch {file delete ${rootname}.sdds} result] {
            puts stderr "Error for $argv0 in [pwd]: $result"
            exit 1  
        }
    }
    catch {exec chmod -w $rootname.sdds}
    if [catch {exec ln -s $output ${rootname}.sdds} result] {
        puts stderr "Error for $argv0 in [pwd]: $result"
        exit 1
    }
}
exit
