#!/bin/sh
# the next line restarts using -*-Tcl-*-sh \
exec tclsh "$0" ${1+"$@"}
# This is a driver script for LDAS jobs that can self-modify,
# adding new command strings as required without editing the
# file
if { $argc == 0 } {
set fid [ open $argv0 r ]
while { ! [ eof $fid ] } {
gets $fid line
if { [ regexp {^set cmd\d+\s+} $line ] } {
puts stdout "$line\n"
}
if { [ regexp {^set sid \[} $line ] } { exit }
}
}
if { $argc > 0 } {
set N [ lindex $argv 0 ]
} else {
set N 1
}
if { $argc > 1 && $argc < 4 } {
set system [ lindex $argv 1 ]
} else {
set system ldas-dev
}
if { $argc == 3 } {
set newcmd [ lindex $argv 2 ]
}
set bp1 "ldasJob { -name phil -password ***** -email pehrens@ligo.caltech.edu } { "
set bp2 " }"
## hand added commands go here (please comment)
set cmd1 "getFrameElements -outputformat {ilwd ascii} -framequery { R H {} {714384016-714384019} Adc(H0:PEM-LVEA_SEISX) }"
set cmd2 "getFrameElements -outputformat {ilwd ascii} -framequery { R H {} {714384016-714384019} Adc(H0:PEM-LVEA_SEISX) }"
###########################################
# self modifiying code driver
if { [ info exists newcmd ] } {
if { [ info complete $newcmd ] } {
set script $argv0
set fid [ open $script r ]
set old [ read $fid [ file size $script ] ]
close $fid
set fid [ open $script w ]
set done 0
set trigger "## END OF AUTO ADDED COMMANDS"
foreach line [ split $old "\n" ] {
regexp {\s+cmd(\d+)\s+} $line -> n
if { ! $done && [ string equal $trigger $line ] } {
set newcmd "set cmd[ incr n ] \"$newcmd\""
eval $newcmd
puts $fid "$newcmd\n"
set done 1
}
puts $fid $line
}
close $fid
}
}
## BEGIN AUTO ADDED COMMANDS
set cmd3 "set foo bar"
## END AUTO ADDED COMMANDS
set sid [ socket $system 10001 ]
fconfigure $sid -blocking off
fconfigure $sid -buffering line
if { [ info exists n ] } { set N $n }
puts $sid $bp1[ set [ subst cmd$N ]]$bp2
fileevent $sid readable [ list set done 1 ]
vwait done
puts stdout [ read $sid ]
close $sid
exit