#!/bin/sh # # "jd" Tcl/Tk wrapper # # (c) Vlad Kondratiev, 2004 # # the next line restarts using tclsh\ exec wish "$0" "$@" ################################################################# # get list of all entities recursively going from top windows # set in spisok # proc getChildren { { name } { spisok } } { global $name foreach l $spisok { foreach i [winfo children $l] { lappend $name $i eval {getChildren $name $i} } } } ################################################################## #set font_bold "Helvetica -12 bold" set font_bold "Times -12 bold" set font "Helvetica -12" wm title . "Julian Day" frame .buttons pack .buttons -side bottom -fill x button .buttons.dismiss -text "Run" -font $font_bold -command "calculate" button .buttons.clear -text "Clear" -font $font_bold -command "clearFields" pack .buttons.dismiss .buttons.clear -side left -fill x -expand 1 frame .row1 ; frame .row2 ; frame .row3 ; frame .row4 pack .row1 .row2 .row3 .row4 -side top -padx 3 -pady 2 -fill x frame .row1.col1 ; frame .row1.col2 pack .row1.col1 -side left -fill both pack .row1.col2 -side right -fill both radiobutton .row1.col1.date -variable flag -value 0 -text "Date " -font $font_bold -anchor w -command { focus .row1.col2.str1.dd eval {getChildren res_dis { .row2 .row3 .row4 } } foreach i $res_dis { catch { $i configure -state disabled } } eval {getChildren res_act { .row1 } } foreach i $res_act { catch { $i configure -state normal } } foreach i { .row1.col1.date .row2.jd .row3.mjd .row4.day } { catch { $i configure -state normal } } unset res_dis res_act } pack .row1.col1.date -side top frame .row1.col2.str1 ; frame .row1.col2.str2 pack .row1.col2.str1 .row1.col2.str2 -side top entry .row1.col2.str1.dd -relief ridge -width 2 -textvariable day -font $font label .row1.col2.str1.l1 -text "." -font $font_bold entry .row1.col2.str1.mm -relief ridge -width 2 -textvariable month -font $font label .row1.col2.str1.l2 -text "." -font $font_bold entry .row1.col2.str1.yy -relief ridge -width 15 -textvariable year -font $font label .row1.col2.str1.l3 -text " dd.mm.yyyy " -font $font_bold pack .row1.col2.str1.dd .row1.col2.str1.l1 .row1.col2.str1.mm .row1.col2.str1.l2 .row1.col2.str1.yy .row1.col2.str1.l3 -side left entry .row1.col2.str2.hh -relief ridge -width 2 -textvariable hour -font $font label .row1.col2.str2.l1 -text ":" -font $font_bold entry .row1.col2.str2.min -relief ridge -width 2 -textvariable minute -font $font label .row1.col2.str2.l2 -text ":" -font $font_bold entry .row1.col2.str2.sec -relief ridge -width 15 -textvariable second -font $font label .row1.col2.str2.l3 -text " hh:mm:ss.sss" -font $font_bold pack .row1.col2.str2.hh .row1.col2.str2.l1 .row1.col2.str2.min .row1.col2.str2.l2 .row1.col2.str2.sec .row1.col2.str2.l3 -side left radiobutton .row2.jd -variable flag -value 1 -text "JD " -font $font_bold -anchor w -command { focus .row2.julian eval {getChildren res_dis { .row1 .row3 .row4 } } foreach i $res_dis { catch { $i configure -state disabled } } eval {getChildren res_act { .row2 } } foreach i $res_act { catch { $i configure -state normal } } foreach i { .row1.col1.date .row2.jd .row3.mjd .row4.day } { catch { $i configure -state normal } } unset res_dis res_act } entry .row2.julian -relief ridge -width 36 -textvariable julian -font $font pack .row2.jd -side left pack .row2.julian -side right radiobutton .row3.mjd -variable flag -value 2 -text "MJD " -font $font_bold -anchor w -command { focus .row3.mjulian eval {getChildren res_dis { .row1 .row2 .row4 } } foreach i $res_dis { catch { $i configure -state disabled } } eval {getChildren res_act { .row3 } } foreach i $res_act { catch { $i configure -state normal } } foreach i { .row1.col1.date .row2.jd .row3.mjd .row4.day } { catch { $i configure -state normal } } unset res_dis res_act } entry .row3.mjulian -relief ridge -width 36 -textvariable modified -font $font pack .row3.mjd -side left pack .row3.mjulian -side right radiobutton .row4.day -variable flag -value 3 -text "Day " -font $font_bold -anchor w -command { focus .row4.e1 eval {getChildren res_dis { .row1 .row2 .row3 } } foreach i $res_dis { catch { $i configure -state disabled } } eval {getChildren res_act { .row4 } } foreach i $res_act { catch { $i configure -state normal } } foreach i { .row1.col1.date .row2.jd .row3.mjd .row4.day } { catch { $i configure -state normal } } unset res_dis res_act } entry .row4.e1 -relief ridge -width 11 -textvariable yearday -font $font label .row4.l1 -text " of the year " -font $font_bold entry .row4.e2 -relief ridge -width 14 -textvariable year -font $font pack .row4.day -side left pack .row4.e2 .row4.l1 .row4.e1 -side right .row1.col1.date invoke wm resizable . 0 0 ##################################################################### # clear all entry fields # proc clearFields {} { global day month year hour minute second julian modified yearday set answer [tk_messageBox -title "Clear fields" -message "Are you sure?" -icon question -type yesno] switch $answer { yes { set day "" ; set month "" ; set year "" set hour "" ; set minute "" ; set second "" set julian "" set modified "" set yearday "" } no - default return } } ##################################################################### ##################################################################### # parse entry fields, make string for Perl-script 'jd' # get result and set back the entru fields # proc calculate {} { global day month year hour minute second julian modified yearday flag switch -glob $flag { 0 { set value "$day.$month.$year $hour:$minute:$second" } 1 { set value "J$julian" } 2 { set value "M$modified" } 3 { set value "D$yearday $year" } } set result [split [exec jd $value] \n] if [regexp {^Error:\ Bad\ value\ of\ (.+):\ (.*)\ \!.*$} [lindex $result 0] full msg arg] then { set extra "" if [expr [string compare "[lindex $result 1]ok" "ok"] != 0] then { set extra "\n[lindex $result 1]" } tk_messageBox -title "Error" -message "Wrong value of $msg: $arg$extra" -icon error unset extra return } regexp {\[DATE\]:\ ([0-9]+)\.([0-9]+)\.([0-9]+)\ ([0-9]+)\:([0-9]+)\:(.+)$} [lindex $result 0] full day month year hour minute second regexp {\[JD\]:\ \ \ (.+)$} [lindex $result 1] full julian regexp {\[MJD\]:\ \ (.+)$} [lindex $result 2] full modified regexp {Day: (.+)$} [lindex $result 3] full yearday } ###################################################################