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

# Input files: /home/helios/oagData/monitoring/IDs/IDs.mon.template
#              /home/helios/oagData/monitoring/IDs/EMW.mon
#
# Output file: IDs.mon


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 root IDs
set recordFile /home/helios/oagData/pvdata/iocRecNamesOAG.sdds

#if {[catch {exec cavget -list=ID "-range=begin=1,end=40,format=%02d" -list=ds,us -list=: -list=DS,DSB,DST,US,USB,UST -list=Linear,Rotary -list=Encoder.AOFF -label} result]} {
#    puts stderr "error: $result"
#    exit
#}
#set missingPV ""
#foreach "name value" $result {
#    if {$value == "?"} {
#        lappend missingPV $name
#    }
#}

for {set sector 1} {$sector<41} {incr sector} {
    # sectoru is the unformatted sector value.
    exec sddsprocess ${root}.mon.template ${root}.mon.$sector \
      -reedit=column,ControlName,%/<sector>/[format %02ld $sector]/%/<sectoru>/$sector/ \
      -reedit=column,ReadbackName,%/<sector>/[format %02ld $sector]/%/<sectoru>/$sector/
    lappend fileList ${root}.mon.$sector
}

set generation 0
set newFile ""
while 1 {
    set lastFile $newFile
    set newFile [format ${root}.mon-%04ld $generation]
    if ![file exists $newFile] {
        break
    }
    incr generation
}
# Added EMW.mon file 09/17/98 
if [catch {eval exec sddscombine $fileList EMW.mon -merge -pipe=out  \
             | sddsprocess -pipe \
             -edit=col,rec_name,ControlName,S?/./D \
             | sddssort  -pipe \
             -column=rec_name -pipe \
             | sddsxref -pipe $recordFile \
             -reuse -nowarnings  -match=rec_name  \
             | sddsconvert -pipe -delete=col,rec_name \
             | sddssort -pipe -column=ReadbackName -num -unique \
             | sddsprocess -pipe=in $newFile -print=column,Provider,ca -print=column,ExpectNumeric,y,type=character -print=column,ExpectFieldType,scalar -define=column,ExpectElements,1,type=long} result] {
    puts stderr "error: $result"
    exit
}

eval file delete $fileList
#foreach pv $missingPV {
#    if {[catch {exec sddsprocess -nowarn $newFile -match=column,ControlName=${pv},!} result]} {
#        puts stderr "error: $result"
#        exit
#    }
#}
eval file delete ${newFile}~


puts stderr "New  file: [exec sdds2stream -rows $newFile]"

if [string length $lastFile] {
    exec sddsselect $newFile $lastFile PVsAdded -match=ControlName -invert
    exec sddsselect $lastFile $newFile PVsRemoved -match=ControlName -invert
    puts stderr "Last file: [exec sdds2stream -rows $lastFile]"
    puts stderr "PVs added: [exec sdds2stream -rows PVsAdded]"
    puts stderr "PVs removed: [exec sdds2stream -rows PVsRemoved]"
}

if [file exists ${root}.mon] {
     file delete ${root}.mon
}
exec ln -s $newFile ${root}.mon
exit
