#!/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 SR_msAveErrorCC+AveSums
set usage {usage: makeOffAdjInputFiles [-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.mon-????]] end]
    set output [APSNextGenerationedName -name $lastFile -newFile 1]
}

# make file with P0's, where installed
set tmpP0 /tmp/[APSTmpString]
set dataDir /home/helios/oagData/sr/BPMStatus
if [catch {exec sddsprocess $dataDir/config.sdds -pipe=out \
             -match=col,DeviceName=*P0 \
             -filter=col,NonexistentH,1,1,NonexistentV,1,1,&,! \
             -filter=col,OkForLoggingV,1,1,OkForLoggingH,1,1,| \
             | sddsconvert -pipe=in $tmpP0.0 \
             -ret=col,DeviceName \
         } result] {
    puts stderr "Error (2) for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsselect P0-master.mon $tmpP0.0 \
             -match=BPMName=DeviceName -reuse $tmpP0} result] {
    puts stderr "Error (3) for $argv0 in [pwd]: $result"
    exit 1
}

#make file with Xray bpms
set tmpX /tmp/[APSTmpString]
if [catch {exec sddsprocess $dataDir/config.sdds -pipe=out \
             -match=col,DeviceName=*BM:P* \
             -filter=col,NonexistentH,1,1,NonexistentV,1,1,&,! \
             -filter=col,OkForLoggingV,1,1,OkForLoggingH,1,1,| \
             | sddsconvert -pipe=in $tmpX.BM.0 \
             -ret=col,DeviceName \
         } result] {
    puts stderr "Error (4) for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsprocess $tmpX.BM.0 $tmpX \
             -print=col,ControlName,%s:msAve:y,DeviceName \
             -print=col,ReadbackName,%s:msAve:y,DeviceName } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}

#make file with Xray bpm blades
if [catch {eval exec sddsprocess $tmpX.BM.0 $tmpX.Ablade \
             -reprint=col,Equation, \
             -edit=col,ControlName,DeviceName,ei/:A:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,ei/:A/ } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsprocess $tmpX.BM.0 $tmpX.Bblade \
             -reprint=col,Equation, \
             -edit=col,ControlName,DeviceName,/ei/:B:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,/ei/:B/ } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}

#make file with ID Xray blades
if [catch {exec sddsprocess $dataDir/config.sdds -pipe=out \
             -match=col,DeviceName=*ID:P* \
             -filter=col,NonexistentH,1,1,NonexistentV,1,1,&,! \
             -filter=col,OkForLoggingV,1,1,OkForLoggingH,1,1,| \
             | sddsconvert -pipe=in $tmpX.ID.0 \
             -ret=col,DeviceName,DeviceType \
         } result] {
    puts stderr "Error (7) for $argv0 in [pwd]: $result"
    exit 1
}

if [catch {eval exec sddsprocess $tmpX.ID.0 $tmpX.ID.Ablade \
             -reprint=col,Equation, \
             -edit=col,ControlName,DeviceName,ei/:A:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,/ei/:A/ \
         } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsprocess $tmpX.ID.0 $tmpX.ID.Bblade \
             -reprint=col,Equation, \
             -edit=col,ControlName,DeviceName,/ei/:B:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,ei/:B/ \
         } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsprocess $tmpX.ID.0 $tmpX.ID.Cblade \
             -reprint=col,Equation, \
             -match=col,DeviceType=*ABCD* \
             -edit=col,ControlName,DeviceName,ei/:C:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,ei/:C/ \
         } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsprocess $tmpX.ID.0 $tmpX.ID.Dblade \
             -reprint=col,Equation, \
             -match=col,DeviceType=*ABCD* \
             -edit=col,ControlName,DeviceName,ei/:D:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,ei/:D/ \
         } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsprocess $tmpX.ID.0 $tmpX.ID.Eblade \
             -reprint=col,Equation, \
             -match=col,DeviceType=*ABEF* \
             -edit=col,ControlName,DeviceName,ei/:E:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,ei/:E/ \
         } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddsprocess $tmpX.ID.0 $tmpX.ID.Fblade \
             -reprint=col,Equation, \
             -match=col,DeviceType=*ABEF* \
             -edit=col,ControlName,DeviceName,ei/:F:NormAveSU/ \
             -edit=col,ReadbackName,DeviceName,ei/:F/ \
         } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}
if [catch {eval exec sddscombine $tmpX $tmpX.Ablade $tmpX.Bblade \
             $tmpX.ID.Ablade $tmpX.ID.Bblade \
             $tmpX.ID.Cblade $tmpX.ID.Dblade \
             $tmpX.ID.Eblade $tmpX.ID.Fblade \
             -pipe=out -merge \
             | sddssort -pipe=in $tmpX.all \
             -col=ReadbackName \
         } result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}

if [catch {eval exec sddscombine NonP0PVs.mon $tmpP0 $tmpX.all \
             -merge $output} result] {
    puts stderr "Error for $argv0 in [pwd]: $result"
    exit 1
}

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

