The concept of this page is to become a place for those of us who are not professional programmers. A place where you don't have to be embarrassed about asking a 'dumb' question. (NOTE: The pros on clt have always been gracious and helpful anyway!) Having trouble with a script? Post the problem part here. Want someone else to take a look at something you are working on and suggest comments or improvements? Put it here. A place where we can work together to improve our skills, or perhaps help each other complete a project. (Don't worry about a lack of 'professional' help - many of the regulars won't be able to resist!) ---- So let me start this off with a little something I have been working on: ---- #!/usr/bin/wish label .local_time -textvariable timezone_name set timezone_name [clock format [clock scan now] -format "%Z"] label .gmt_time -textvariable tz_name if {$tcl_version >= 8.3} { set tz_name [clock format [clock scan now] -gmt 1\ -format "%Z"] } else { set tz_name "GMT" } grid .local_time -row 0 -columnspan 1 grid .gmt_time -row 0 -column 1 -columnspan 1 entry .local_date_entry entry .gmt_date_entry grid .local_date_entry -row 1 -column 0 -columnspan 1 grid .gmt_date_entry -row 1 -column 1 -columnspan 1 entry .local_time_entry -textvariable local_time entry .gmt_time_entry -textvariable gmt_time grid .local_time_entry -row 2 -column 0 -columnspan 1 grid .gmt_time_entry -row 2 -column 1 -columnspan 1 set local_date [clock format [clock scan now]\ -format "%A %B %d, %Y"] set gmt_date [clock format [clock scan now] -gmt 1\ -format "%A %B %d, %Y"] .local_date_entry insert 0 $local_date .gmt_date_entry insert 0 $gmt_date set local_length [string length $local_date] set gmt_length [string length $gmt_date] .local_date_entry configure -width $local_length -justify center .gmt_date_entry configure -width $gmt_length -justify center .local_time_entry configure -width $local_length -justify center .gmt_time_entry configure -width $gmt_length -justify center proc local_clock:set var { global $var set $var [clock format [clock seconds] -format "%I:%M:%S %p" ] after 200 [list local_clock:set $var] } local_clock:set local_time proc gmt_clock:set var { global $var set $var [clock format [clock scan now] -gmt 1\ -format "%I:%M:%S %p" ] after 200 [list gmt_clock:set $var] } gmt_clock:set gmt_time tk appname "Double Clock" ---- Anyone who wants to use this in any manner whatsoever, is welcome to it. Most of the code for the clocks was found doing a search on clt. (I just changed the format a little) It is easily possible to use other time zones, but I wish I could figure out a way to do this using time zone mnemonics and/or military time zones. Any suggestions? ''so'' ''DKF - 20000612:'' Up to (and including) 8.3 at least, you'd need to perform the timezone adjustment yourself. However, you can use [[clock scan]] (on most platforms at least) to help you get the offset: proc getClockOffset {timezone} { # Do it this way to avoid UNIXism assumption... set epoch [clock format 0 -format "%b %d %Z %H:%M:%S %Y" -gmt 1] regsub GMT $epoch $timezone datestring return [expr {-[clock scan $datestring]}] } This should help you convert timezones (including the military designations, IIRC) into offsets so you can format the date correctly. The only awkward bit is getting a list of timezones that the code supports, and I'm afraid that you might need to delve into the source code for that (there are some interesting clashes in there!) (Note that I specify the format because on some platforms the usual output of [[clock format]] can't be understood by [[clock scan]], and the format is needed to avoid hard-coding in the assumption that the epoch begins with 1970, as this might not hold on all platforms...) Your task, should you choose to accept it, is to combine this code into the preceding code to create a more internationally-aware application... ---- Donal - thanks for the input. I am working on this from time to time. Never figured on the problems with the time-zone mnemonics! ''so'' ---- On another subject - A recent posting on clt reminded me of my first foray into the newsgroup. When I first began tinkering with tcl/tk, I could find examples of scripts to design a data input form, but nothing on how to *save* the data. I have always meant to post something somewhere for beginners (like me), but never got around to it - til now, a *simplistic*, *minimalist*, dataform, that works: ---- frame .entryframe label .entryframe.l1 -text "Last Name" entry .entryframe.e1 -textvariable data_array(lastName) label .entryframe.l2 -text "First Name" entry .entryframe.e2 -textvariable data_array(firstName) grid .entryframe.l1 .entryframe.e1 grid .entryframe.l2 .entryframe.e2 grid .entryframe frame .controlframe button .controlframe.clear -text "Clear" -command { clear_card } button .controlframe.find -text "Find" -command { file_get } button .controlframe.save -text "Save" -command { file_save } button .controlframe.exit -text "Exit" -command { exit } grid .controlframe.clear .controlframe.find .controlframe.save .controlframe.exit grid .controlframe proc file_save { } { global data_array ## DKF: A more efficient way to dump an array to a file is below #foreach index [array names data_array] { #append data "set data_array($index) {$data_array($index)}" \n #} set file_types { {"All Files" * } } set filename [tk_getSaveFile -filetypes $file_types\ -defaultextension .mdf -initialfile $data_array(lastName)$data_array(firstName)\ ] set fileid [open $filename w] #puts $fileid $data puts $fileid [list array set data_array [array get data_array]] close $fileid } proc file_get { } { global data_array clear_card set file_types { {"My Data File" { .mdf }} } set filename [tk_getOpenFile -filetypes $file_types\ -defaultextension . -initialdir [pwd]] source $filename } proc clear_card { } { .entryframe.e1 delete 0 end .entryframe.e2 delete 0 end } ---- All you pros please feel free to comment on better ways to do this, script improvements, etc. ''DKF'' - As you can see above, it is easier to use [[array get]] and [[array set]] to dump and reload arrays from files, though the general principle of loading data via source is a good one for non-binary data.