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

# output files: FrontendBeamlines.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

exec sddsprocess /home/helios/oagData/pvdata/iocRecNamesOAG.sdds -pipe=out \
  "-match=column,rec_name=S????-FEEPS:*OpenedM,rec_name=S????-FEEPS:*ClosedM,|,rec_name=S????-FEEPS:*OpenM,|,rec_name=S????-FEEPS:*CloseM,|,rec_name=S????-FEEPS:*PositionM,|,rec_name=S????-FEEPS:*PermitM,|,rec_name=S????-FEEPS:*OperationNormalM,|,rec_name=S????-FEEPS:*StatusM,|,rec_name=S????-FEEPS:*VacuumOKM,|,rec_name=S????-FEEPS:*PressureM,|,rec_name=S????-FEEPS:*TestKeyM,|,rec_name=S????-FEEPS:*OpenCommandM,|,rec_name=S????-FEEPS:*OpenRequestM,|,rec_name=S????-FEEPS:*NoBeamM,|,rec_name=S????-FEEPS:*ActualM,|,rec_name=S????:????:GapM,|,rec_name=S????:????:GapSetC,|,rec_name=NoOfShuttersOpenA,|,rec_name=S-DCCT:CurrentM,|,rec_name=S:ActualMode*,|,rec_name=XFD:ShutterPermit,|,rec_name=S34-SBM:*,|,rec_name=S36-SBM:*,|,rec_name=P?:??ID:CHANNEL_?_CALC,|,rec_name=P?:??ID:CHANNEL_?_SET,|,rec_name=P?:??ID:DIW_CURRENT_?,|,rec_name=P?:??ID:DIW_SET_POINT_?,|,rec_name=S??ID-PSS:Flow??:CH?M,|,rec_name=S??ID-PSS:Flow??:SetpointM,|,rec_name=P?:????:???_???_SS?_????_LS,|,rec_name=S????-PSS:S?S:?S?Opened:P?M,|,rec_name=S????-PSS:S?S:?S?Opened:LIM,|,rec_name=S????-PSS:S?S:?S?Closed:P?M,|,rec_name=S????-PSS:S?S:?S?Closed:LIM,|,rec_name=S????-PSS:*BeamBlockingM,|,rec_name=S????-PSS:FES:PS?Closed:LIM,|,rec_name=P*BLOCKING_BEAM,|,rec_name=P*BEAM_PRESENT,|,rec_name=P*FES_PS?_CLOSED,|,rec_name=P*FES_PS?_OPENED_LS,|,rec_name=P*STA*S_OPEN_PL,|" -delete=column,ioc_name | \
  sddsconvert -pipe \
  -rename=column,rec_name=ControlName | \
  sddssort -pipe=in ../DataLogging/FrontendBeamlines.mon.new \
  -col=ControlName -num -uniq

sdds load ../DataLogging/FrontendBeamlines.mon.new data
unset data(Description.Text)
unset data(Description.Contents)
sdds save ../DataLogging/FrontendBeamlines.mon.new data

exec sddscainfo ../DataLogging/FrontendBeamlines.mon.new ../DataLogging/FrontendBeamlines.mon.new.info -pend=10
file delete ../DataLogging/FrontendBeamlines.mon.new

exec sddsprocess ../DataLogging/FrontendBeamlines.mon.new.info -pipe=out -match=column,Active=y -nowarn \
  "-print=parameter,InstallLocation,/home/helios/oagData/logging/FrontendBeamlines/FrontendBeamlines.mon" | \
  sddsprocess -pipe -delete=column,Active,IOCHost,ReadAccess,WriteAccess,StructureID | \
  sddsconvert -pipe=in ../DataLogging/FrontendBeamlines.mon.new -ascii -rename=column,ElementCount=ExpectElements,FieldType=ExpectFieldType,Units=ReadbackUnits
file delete ../DataLogging/FrontendBeamlines.mon.new.info

sdds load ../DataLogging/FrontendBeamlines.mon.new data
set data(ColumnInfo.ReadbackName) "type SDDS_STRING"
set data(Column.ReadbackName) $data(Column.ControlName)
set rbnames [lindex $data(Column.ControlName) 0]

foreach rb $rbnames {
    if {[string range $rb end-2 end] == "_LS"} {
        set rb [os editstring %/SAS/Station_A/%/SBS/Station_B/%/SCS/Station_C/%/SDS/Station_D/%/SS1_//%/SS2_//%/OPEN_LS/Shutter_Open/%/CLSD_LS/Shutter_Closed/ $rb]
    } elseif {[string range $rb end-3 end] == ":PAM"} {
        set rb PA:[os editstring %/-PSS//%/SAS:/Station_A_/%/SBS:/Station_B_/%/SCS:/Station_C_/%/SDS:/Station_D_/%/Opened/_Shutter_Open/%/Closed/_Shutter_Closed/ [string range $rb 1 end-4]]
    } elseif {[string range $rb end-3 end] == ":PBM"} {
        set rb PB:[os editstring %/-PSS//%/SAS:/Station_A_/%/SBS:/Station_B_/%/SCS:/Station_C_/%/SDS:/Station_D_/%/Opened/_Shutter_Open/%/Closed/_Shutter_Closed/ [string range $rb 1 end-4]]
    }
    lappend rbnew $rb
}
set data(Column.ReadbackName) [list $rbnew]
#set data(Column.ReadbackName) [list [eval os editstring  %/SAS/Station_A/%/SBS/Station_B/%/SCS/Station_C/%/SDS/Station_D/%/SS1_//%/SS2_//%/OPEN_LS/Shutter_Open/%/CLSD_LS/Shutter_Closed/ [lindex $data(Column.ControlName) 0]]]


set data(ColumnNames) "ControlName ReadbackName ReadbackUnits Provider ExpectNumeric ExpectFieldType ExpectElements"
set data(ColumnInfo.ExpectElements) "type SDDS_LONG"
set data(ColumnInfo.ExpectNumeric) "type SDDS_CHARACTER"
set en ""
foreach ndt [lindex $data(Column.NativeDataType) 0] \
  eft [lindex $data(Column.ExpectFieldType) 0] \
  cn [lindex $data(Column.ControlName) 0] \
  ee [lindex $data(Column.ExpectElements) 0] {
      if {($ndt == "double") || ($ndt == "int") || ($eft == "ENUM structure")} {
          lappend en y
      } elseif {$ndt == "string"} {
          puts "makeFEEPSLoggerInput: Cant log string PVs with the data logger: $cn"
#          lappend en n
          exit
      } else {
          puts "makeFEEPSLoggerInput: Unexepected native data type: $ndt"
          exit
      }
      if {$ee == 1} {
          lappend eftList scalar
      } else {
          puts "makeFEEPSLoggerInput: Unexepected element count: $ee $cn"
          exit
      }
  }
set data(Column.ExpectNumeric) [list $en]
set data(Column.ExpectFieldType) [list $eftList]


sdds save ../DataLogging/FrontendBeamlines.mon data
file delete ../DataLogging/FrontendBeamlines.mon.new


