summaryrefslogtreecommitdiffstats
path: root/ds9/library/header.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'ds9/library/header.tcl')
-rw-r--r--ds9/library/header.tcl195
1 files changed, 195 insertions, 0 deletions
diff --git a/ds9/library/header.tcl b/ds9/library/header.tcl
new file mode 100644
index 0000000..e07b3d8
--- /dev/null
+++ b/ds9/library/header.tcl
@@ -0,0 +1,195 @@
+# Copyright (C) 1999-2016
+# Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+# For conditions of distribution and use, see copyright notice in "copyright"
+
+package provide DS9 1.0
+
+proc DisplayHeaderMenu {} {
+ global current
+
+ # possible cases
+ # image primary
+ # image xtension
+ # compressed primary
+ # compressed xtension
+ # bin table xtension
+ # hpx xtension
+ # cube primary
+ # cube xtension
+ # multiple xtension cube
+ # multiple file cube
+ # mosaic extension
+ # mosaic image xtension
+ # mosaic cube xtension
+ # mosaic image cube xtension
+
+ set cnt [$current(frame) get fits count]
+
+ if {$cnt > 0} {
+ set slb(count) 0
+
+ # check for primary
+ set fn [$current(frame) get fits file name 1]
+ set xten \
+ [string trim [$current(frame) get fits header 1 keyword {XTENSION}]]
+ if {$xten != {}} {
+ set bb [string first {[} $fn]
+ if {$bb>0} {
+ set pn [string range $fn 0 [expr $bb-1]]
+ } else {
+ set pn "primary"
+ }
+ incr slb(count)
+ set slb($slb(count),item) $pn
+ set slb($slb(count),value) -1
+ }
+
+ set last {}
+ for {set ii 1} {$ii <= $cnt} {incr ii} {
+ set fn [$current(frame) get fits file name $ii]
+ set bb [string first {[} $fn]
+ if {$bb<0} {
+ set nn [$current(frame) get fits ext $ii]
+ if {$nn > 0} {
+ set fn "$fn\[\]"
+ }
+ }
+
+ if {$fn != $last} {
+ incr slb(count)
+ set slb($slb(count),item) $fn
+ set slb($slb(count),value) $ii
+ set last $fn
+ }
+ }
+
+ if {$slb(count) <= 1} {
+ DisplayHeader $current(frame) 1 $fn
+ } else {
+ if {[SLBDialog slb {Select Header} 40]} {
+ DisplayHeader $current(frame) $slb(value) $slb(item)
+ }
+ }
+ }
+}
+
+proc DisplayHeader {frame id title} {
+ global current
+
+ set varname "hd-$frame-$id"
+ upvar #0 $varname var
+ global $varname
+
+ SimpleTextDialog $varname $title 80 40 insert top \
+ [$current(frame) get fits header $id]
+
+ # create a special text tag for keywords
+ $var(text) tag configure keyword -foreground blue
+
+ # color tag keywords
+ set stop [$var(text) index end]
+ for {set ii 1.0} {$ii<$stop} {set ii [expr $ii+1]} {
+ $var(text) tag add keyword $ii "$ii +8 chars"
+ }
+}
+
+proc UpdateHeaderDialog {} {
+ global current
+
+ set frame $current(frame)
+ set cnt 1
+ if {[$frame has fits mosaic]} {
+ set cnt [$frame get fits count]
+ }
+
+ for {set id 1} {$id <= $cnt} {incr id} {
+ set varname "hd-$frame-$id"
+ upvar #0 $varname var
+ global $varname
+ if {![info exists var(top)]} {
+ continue
+ }
+ if {![winfo exists $var(top)]} {
+ continue
+ }
+
+ $var(text) delete 1.0 end
+ $var(text) insert end [$frame get fits header $id]
+
+ # color tag keywords
+ set stop [$var(text) index end]
+ for {set ii 1.0} {$ii<$stop} {set ii [expr $ii+1]} {
+ $var(text) tag add keyword $ii "$ii +8 chars"
+ }
+ }
+}
+
+proc DestroyHeader {frame} {
+ set cnt 1
+ if {[$frame has fits mosaic]} {
+ set cnt [$frame get fits count]
+ }
+
+ for {set id 1} {$id <= $cnt} {incr id} {
+ set varname "hd-$frame-$id"
+ upvar #0 $varname var
+ global $varname
+
+ if {[info exists $varname]} {
+ if {[winfo exists $var(top)]} {
+ SimpleTextDestroy $varname
+ }
+ }
+ }
+}
+
+proc ProcessHeaderCmd {varname iname} {
+ upvar $varname var
+ upvar $iname i
+
+ set item [string tolower [lindex $var $i]]
+ switch -- $item {
+ close -
+ save {incr i}
+ }
+
+ if {[lindex $var $i] != {} && [string is integer [lindex $var $i]]} {
+ set jj [lindex $var $i]
+ incr i
+ } else {
+ set jj 1
+ }
+
+ global current
+ if {$current(frame) != {}} {
+ switch -- $item {
+ close {
+ set vvarname "hd[string range $current(frame) end end]-$jj"
+ upvar #0 $vvarname vvar
+ global $vvarname
+
+ if {[info exists vvar(top)]} {
+ SimpleTextDestroy $vvarname
+ }
+ incr i -1
+ }
+ save {
+ set fn [lindex $var $i]
+ if {$fn != {}} {
+ if {[catch {set ch [open "| cat > \"$fn\"" w]}]} {
+ Error [msgcat::mc {An error has occurred while saving}]
+ return
+ }
+ puts -nonewline $ch [$current(frame) get fits header $jj]
+ close $ch
+ }
+ }
+ default {
+ catch {DisplayHeader $current(frame) $jj \
+ [$current(frame) get fits file name $jj]}
+ incr i -1
+ }
+ }
+ }
+}
+