#!/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 SRXrayBPM
set recordFile /home/helios/oagData/pvdata/iocRecNamesOAG.sdds

set usage {usage: makeSRXrayBPMreqFile [-output <filename> | -install 1] [-mode {SR|normal}]}
set output ""
set install 0
set mode normal
set args $argv
if {[APSStrictParseArguments {output install mode}] || \
      (![string length $output] && !$install) || \
      ([string length $output] && $install)} {
    puts stderr "Error for $argv0 in [pwd]: $usage"
    exit 1
}
### the template files need to be update when the template.txt files change
### /home/helios/oagData/apsu/XbpmSetup/inputFiles/Save-N-Restore
### the text files are: SnR-Template-TetrAMM.txt, SnR-Template-XBPM1.txt, SnR-Template-XBPM2.txt, SnR-Template-XBPM-BM.txt
### in above directory, run convertFile, SnR-Template-TetrAMM.sdds, SnR-Template-XBPM-BM.sdds, SnR-Template-XBPM1.sdds, SnR-Template-XBPM2.sdds will be generated

if !$install {
    if [file exists $output] {
        puts stderr "Error for $argv0 in [pwd]: $output exists"
        exit 1
    }
    set lastFile ""
} else {
    set lastFile [lindex [lsort [glob -nocomplain $rootName.req-????]] end]
    if ![string length $lastFile] {
        set lastFile $rootName.req-0000
    }
    set output [APSNextGenerationedName -name $lastFile -newFile 1]
}
#ID gaps
set tmpRoot /tmp/[APSTmpString]
set fileList ""
if {0} {
    for {set sector 1} {$sector<=35} {incr sector} {
	set sectorf [format %02d $sector]
	foreach ID {DSID USID} {
	    if [catch {exec replaceText /home/helios/oagData/SCR/requestFiles/SRIDGap.req.template \
			   -orig=<sectorf>,<sector>,<ID> -repl=$sectorf,$sector,$ID \
			   $tmpRoot.gap.$sector.$ID } result] {
		puts stderr "Error creating ID gap: $result"
		exit 1
	    }
	}
	lappend fileList $tmpRoot.gap.$sector.$ID
    }
}

#ID XBPM
set tetraTemplate /home/helios/oagData/apsu/XbpmSetup/inputFiles/Save-N-Restore/SnR-Template-TetrAMM.sdds
set IDxbpm1Template /home/helios/oagData/apsu/XbpmSetup/inputFiles/Save-N-Restore/SnR-Template-XBPM1.sdds
set IDxbpm2Template /home/helios/oagData/apsu/XbpmSetup/inputFiles/Save-N-Restore/SnR-Template-XBPM2.sdds
set BMxbpmTemplate  /home/helios/oagData/apsu/XbpmSetup/inputFiles/Save-N-Restore/SnR-Template-XBPM-BM.sdds

for {set sector 1} {$sector<=35} {incr sector} {
    set sectorf [format %02d $sector]
    #ID tetra
    set tetraList {CM1ds CM1us CM2us CM2ds CM2us CM3ds CM3us CM4ds CM4us}
    foreach tetra $tetraList {
	if [catch {exec replaceText $tetraTemplate $tmpRoot.s$sector.$tetra \
		       -orig=<root>,<tetra>,<sector> \
		       -repl=S${sectorf}IDFE-XBPM,$tetra,S$sectorf } result] {
	    return -code error "Error1: $result"
	}
	lappend fileList $tmpRoot.s$sector.$tetra
    }
    
    #BM tetra only BM1
    if [catch {exec replaceText $tetraTemplate $tmpRoot.s$sector.bmtetra \
		   -orig=<root>,<tetra>,<sector> \
		   -repl=S${sectorf}BMFE-XBPM,CM1,S$sectorf } result] {
	return -code error "Error2: $result"
    }
    lappend fileList $tmpRoot.s$sector.bmtetra 

    #ID xbpm
    foreach bpm {1 2} {
	foreach st {ds us} {
	    set template [set IDxbpm${bpm}Template]
	    set root S${sectorf}IDFE-XBPM:P${bpm}$st
	    set tetraRoot1  S${sectorf}IDFE-XBPM:CM1$st
	    set tetraRoot2  S${sectorf}IDFE-XBPM:CM2$st
	    set tetraRoot3  S${sectorf}IDFE-XBPM:CM3$st
	    set tetraRoot4  S${sectorf}IDFE-XBPM:CM4$st
	    set tetra1 CM1$st
	    set tetra2 CM2$st
	    set tetra3 CM3$st
	    set tetra4 CM4$st
	    set BPM P${bpm}$st
	    if [catch {exec replaceText  $template $tmpRoot.s$sector.IDbpm$bpm.$st \
		   -orig=<root>,<sector>,<bpm>,<tetraRoot1>,<tetraRoot2>,<tetraRoot3>,tetraRoot4>,<tetra1>,<tetra2>,<tetra3>,<tetra4> \
			   -repl=$root,S$sectorf,$BPM,$tetraRoot1,$tetraRoot2,$tetraRoot3,$tetraRoot4,$tetra1,$tetra2,$tetra3,$tetra4 } result] {
		return -code error "Error3: $result"
	    }
	    lappend fileList $tmpRoot.s$sector.IDbpm$bpm.$st
	}  
    }

    #BM xbpm
    if [catch {exec replaceText  $BMxbpmTemplate $tmpRoot.s$sector.BMbpm \
		   -orig=<root>,<sector> \
		   -repl=S${sectorf}BMFE-XBPM,S$sectorf } result] {
	return -code error "Error4: $result"
    }
   
    lappend fileList $tmpRoot.s$sector.BMbpm
}

if [catch {eval exec sddscombine $fileList -merge -pipe=out  \
             | sddsprocess -pipe \
	       -edit=col,rec_name,ControlName,S?/./D \
             | sddssort  -pipe -unique \
             -column=rec_name -pipe \
             | sddsxref -pipe $recordFile \
             -reuse -nowarnings  -match=rec_name  \
             | sddsconvert -pipe -delete=col,rec_name,ioc_name \
             | sddssort -pipe=in $output \
             -column=ControlName -num -unique } result] {
    puts stderr "error5: $result"
    exit
}

puts "output: $output"

eval file delete -force $fileList

if [string compare $mode SR]!=0 {
    puts stderr "New  file: [exec sdds2stream -rows $output]"
    if [string length $lastFile] {
        puts stderr "Last file: [exec sdds2stream -rows $lastFile]"
    }
}
if $install {
    if [file exists ${rootName}.req] {
        if [catch {file delete ${rootName}.req} result] {
            puts stderr "Error for $argv0 in [pwd]: $result"
            exit 1  
        }
    }
    catch {exec chmod -w $rootName.req}
    if [catch {exec ln -s $output ${rootName}.req} result] {
        puts stderr "Error for $argv0 in [pwd]: $result"
        exit 1
    }
    if [catch {APSMakeSCRCategoryFiles -input ${rootName}.req} result] {
        puts stderr "Error for $argv0 in [pwd]: $result"
        exit 1
    }
}

exit
