#!/usr/bin/wish -f ## ##+####################################################################### ## NOTE: ## If the 'wish' interpreter is in another directory, like ## /usr/local/bin, you, as root, can make a soft-link from 'wish' there ## to /usr/bin/wish --- with a command like ## ln -s /usr/bin/local/wish /usr/bin/wish ## The form of this command: ## ln -s ##+####################################################################### ## Tk SCRIPT NAME: tkSiteLatitudeLongitudeSelector.tk ## ## WHERE: in $FEDIR_TKGUIS/SELECTORtools = $FEDIR/tkGUIs/SELECTORtools ## ## where $FEDIR is the installation directory ## of an FE subsystem --- such as 'tkGooies'. ## Reference: www.freedomenv.com ##+####################################################################### ## PURPOSE: This Tk GUI script provides a GUI for SELECTING AN SITE ## (such as a city or geographic location on the Earth) ## and showing the latitude-longitude location of that ## site (or the approximate middle of the site) --- accurate ## to degrees and minutes --- in other words, accurate to ## one/sixtieth of a degree. ## ## By clicking on a 'UseIt' button on the GUI, a 'results string' ## (the sited ID - country name, city name, etc. - along ## with the latitude and longitude location of the site) ## is written to 'stdout'. ## ## The 'results' include the latitude-longitude location in 2 forms: ## - decimal degrees, such as 45.50 ## and ## - degrees and minutes, such as 45 30. ## ## The 'site ID' may take various string forms. Examples: ## ## - United States, California, San Francisco ## - England, London ## - United States, Wyoming, Yellowstone Park ## - Australia, Queensland, ... ## - Atlantic Ocean, Bermuda, ... ## - Pacific Ocean, Fiji, ... ## ## OPERATION: ## ## After the user has chosen a site from a scrolling listbox, the ## user can click on a 'UseIt' button, and 'the results' ## are sent, as a string, to 'stdout'. ## ## With this 'selection' capability, this Tk script can be called ## IN A SHELL SCRIPT OR IN ANOTHER TK SCRIPT, so that this Tk script ## can ACT AS A SITE-LATITUDE-LONGITUDE SELECTOR utility. ## ##+############### ## SOME REFERENCES for site-latitude-longitude data: ## ## - http://www.factmonster.com/ipka/A0001769.html ## - 'Latitude and Longitude of World Cities' ## ## - http://www.factmonster.com/ipka/A0001796.html ## - 'Latitude and Longitude of U.S. and Canadian Cities' ## ## - http://www.infoplease.com/ipa/A0001769.html ## - 'Latitude and Longitude of World's Largest Cities' ## ## - https://en.wikipedia.org/wiki/List_of_cities_by_latitude ## - 'List of cities by latitude' ## ## - https://en.wikipedia.org/wiki/List_of_cities_by_longitude ## - 'List of cities by longitude' ## ## - http://dev.maxmind.com/geoip/legacy/codes/country_latlon/ ## - 'Average Latitude and Longitude for Countries' ## ## - http://dev.maxmind.com/geoip/legacy/codes/state_latlon/ ## - 'Average Latitude and Longitude for U.S. States' ## ## - https://en.wikipedia.org/wiki/List_of_national_parks_of_the_United_States ## - 'List of national parks of the United States' (see 'Location' column) ## ##+################# ## THE GUI WIDGETS: ## ## The options available to the user are indicated by ## the following 'sketch' of the GUI: ## ## FRAMEnames ## VVVVVVVVVV ## ----------------------------------------------------------------------------------- ## tkSiteLatitududeLongitude Selector ## [window title] ## ----------------------------------------------------------------------------------- ## ## .fRbuttons {UseIt} {Cancel} {Help} ## ## .fRselected Selected Site: ....[text widget].... Latitude Longitude: ....[text widget].... ## ## SITES: ## |-------------------------------------------------------------------------------A ## .fRlist | LISTBOX widget to hold lines of | ## | site IDs and location data, such as | ## | ... | ## | United States, California, San Diego # decimal degrees # degrees, minutes | ## | United States, California, San Franisco # decimal degrees # degrees, minutes | ## | ... | ## | ... | ## | | ## | | ## | | ## |<----------------------------------------------------------------------------->V ## ## ------------------------------------------------------------------- ## ## In the above sketch of the GUI: ## ## SQUARE BRACKETS indicate a comment (not to be placed on the GUI). ## BRACES indicate a Tk 'button' widget. ## A COLON indicates that the text before the colon is on a 'label' widget. ## (To clarify the label extent, single quotes may be used around the text.) ## UNDERSCORES indicate a Tk 'entry' widget. ## CAPITAL-O indicates a Tk 'radiobutton' widget. ## CAPITAL-X indicates a Tk 'checkbutton' widget (if any). ## <----O----> indicates a Tk 'scale' widget (if any). ## ## A rectangle marked ## by hyphens (-) and ## vertical bars (|) indicates a Tk 'listbox' widget. ## ##+############## ## GUI components: ## ## From the GUI 'sketch' above, it is seen that the GUI consists of ## about ## ## - 3 button widgets ## - 3 label widgets (a couple may be one-line text widgets) ## - 2 one-line text widgets ## - 1 listbox widgets (with x,y scrollbars) ## - 0 entry widgets ## - 0 radiobutton widgets ## - 0 checkbutton widgets ## - 0 scale widgets ## - 0 canvas widgets ## ##+##################################################################### ## CALLED BY: a 'SELECTORtools' toolchest in the 'tkGooies' FE system ## OR ## in a shell script or another Tk script. ##+##################################################################### ## 'CANONICAL' STRUCTURE OF THIS CODE: ## ## 0) Set general window parms (win-name, win-position, win-color-scheme, ## fonts, widget-geom-parms, win-size-control, text-array-for-labels-etc). ## 1a) Define ALL frames (and sub-frames). ## 1b) Pack ALL the frames and sub-frames. ## 2) Define & pack all widgets in the frames, frame by frame. ## ## 3) Define key and mouse/touchpad/touch-sensitive-screen 'event' ## BINDINGS, if needed. ## 4) Define PROCS, if needed. ## 5) Additional GUI INITIALIZATION (typically with one or two ## procs in section 4), if needed. ## ##+################################# ## The code structure in more detail, for this particular script: ## ## 1a) Define ALL frames: ## Top-level : '.fRbuttons' , .fRselected', '.fRlist' ## ## These frames are stacked from top to bottom. ## ## 1b) Pack ALL frames. ## ## 2) Define & pack all widgets in the frames -- basically going through ## frames & their interiors in top-to-bottom and/or left-to-right order: ## ## - '.fRbuttons' (to contain several buttons) ## ## - '.fRselected' (to contain 2 pairs of 'label' and 'text' widgets) ## ## - '.fRlist' (to contain a label widget and a 'listbox' widget with 2 scrollbars) ## ## 3) Define BINDINGS: none currently ## ## 4) Define PROCS: ## - 'listbox_select' - called by a button1-release binding on ## the siteIDs listbox widget. ## - 'put_vars' - called by the 'UseIt' button ## - 'popup_msg_var_scroll' - called by the 'Help' button ## ## 5) Additional GUI INITIALIZATION: initialize entry widgets and ## set the HELPtext var for the Help button. ## ##+####################################################################### ## DEVELOPED WITH: Tcl-Tk 8.5 on Ubuntu 9.10 (2009 october, 'Karmic Koala). ## ## wish> puts "$tcl_version $tk_version" ## showed ## 8.5 8.5 ##+######################################################################## ## FE system Copyright 2006+ by Blaise Montandon ##+######################################################################## ## MAINTENANCE HISTORY: ## Created by: Blaise Montandon 2016apr05 Started version for the FE 'tkGooies' ## system, on Linux. ## Changed by: Blaise Montandon 2016 ##+############################################################################ ##+################################# ## SET THE TOP WINDOW NAME. ##+################################# wm title . "tkSiteLatitudeLongitudeSelector" wm iconname . "SiteSelector" # catch { wm title . "$env(SITE_WIN_TITLE)" } # catch { wm iconname . "$env(SITE_ICON_TITLE)" } ##+################################### ## SET THE TOP WINDOW POSITION. ##+################################### wm geometry . +50+50 # catch {eval wm geometry . "$env(SITE_COLORSEL_GEOM)" } ##+####################################################################### ## SET COLOR SCHEME (palette) FOR THE WINDOW. ##+####################################################################### if {1} { ## Grayish palette set Rpal255 240 set Gpal255 240 set Bpal255 240 } if {0} { ## Bluish palette set Rpal255 180 set Gpal255 180 set Bpal255 255 } if {0} { ## Greenish palette set Rpal255 180 set Gpal255 255 set Bpal255 180 } if {0} { ## Reddish palette set Rpal255 255 set Gpal255 180 set Bpal255 180 } set hexCOLORpal [format "#%02X%02X%02X" $Rpal255 $Gpal255 $Bpal255] tk_setPalette $hexCOLORpal ## Set color background for some widgets. set textBKGD "#f0f0f0" set listboxBKGD "#f0f0f0" # set entryBKGD "#f0f0f0" # set radbuttBKGD "#c0c0c0" # set chkbuttBKGD "#c0c0c0" # set scaleBKGD "#f0f0f0" ##+####################################################################### ## SET FONT VARS to use in the 'font create' statements below. ##+####################################################################### set FONTsize 14 set FONT_SMALLsize 12 ## For variable width: set FONT_varwidth \ " -family {comic sans ms} -size -$FONTsize -weight bold -slant roman " set FONT_SMALL_varwidth \ " -family {comic sans ms} -size -$FONT_SMALLsize -weight normal -slant roman " ## For fixed width: set FONT_fixedwidth \ " -family {dejavu sans mono} -size -$FONTsize -weight bold -slant roman " set FONT_SMALL_fixedwidth \ " -family {dejavu sans mono} -size -$FONT_SMALLsize -weight normal -slant roman " ##+##################################################################### ## DEFINE (temporary) 'font create' NAMES to be used ## in '-font' widget specs below. ##+##################################################################### eval font create fontTEMP_button $FONT_varwidth eval font create fontTEMP_label $FONT_varwidth eval font create fontTEMP_text $FONT_fixedwidth eval font create fontTEMP_listbox $FONT_fixedwidth # eval font create fontTEMP_entry $FONT_fixedwidth # eval font create fontTEMP_scale $FONT_varwidth # eval font create fontTEMP_radiobutton $FONT_fixedwidth # eval font create fontTEMP_checkbutton $FONT_fixedwidth # eval font create fontTEMP_SMALL_button $FONT_SMALL_varwidth eval font create fontTEMP_SMALL_label $FONT_SMALL_varwidth # eval font create fontTEMP_SMALL_text $FONT_SMALL_fixedwidth # eval font create fontTEMP_SMALL_listbox $FONT_SMALL_fixedwidth # eval font create fontTEMP_SMALL_entry $FONT_SMALL_fixedwidth # eval font create fontTEMP_SMALL_scale $FONT_SMALL_varwidth # eval font create fontTEMP_SMALL_radiobutton $FONT_SMALL_fixedwidth # eval font create fontTEMP_SMALL_checkbutton $FONT_SMALL_fixedwidth ##+####################################################################### ## SET GEOM VARS FOR THE VARIOUS WIDGET DEFINITIONS. ## (e.g. padx,pady for buttons) ##+####################################################################### ## For BUTTON widgets: set PADY_button 0 set PADX_button 0 set BDwidthPx_button 2 ## For LABEL widgets: set PADXpx_label 0 set PADYpx_label 0 set BDwidthPx_label 2 ## For TEXT widgets: set BDwidthPx_text 2 ## For LISTBOX widgets: set BDwidthPx_listbox 2 set rightListboxWidthChars 15 set rightListboxHeightChars 12 ## For ENTRY widgets: # set BDwidthPx_entry 2 ## SCALE geom parameters: # set BDwidthPx_scale 2 # set scaleLengthPx 300 # set scaleThicknessPx 10 ## CANVAS geom parms: # set initCanWidthPx 200 # set initCanHeightPx 200 # set minCanHeightPx 24 # # set BDwidthPx_canvas 2 # set BDwidthPx_canvas 0 ##+################################################################### ## Set a MINSIZE of the window (roughly). (OR fix the window size.) ## ## For WIDTH, allow for a minwidth of the '.fRbuttons' frame: ## several buttons (UseIt,Cancel,Help). ## Alternatively, use an estimate of the average ## width (in characters) of the listbox lines. ## ## For HEIGHT, allow ## 1 char high for the '.fRbuttons' frame ## 1 char high for the '.fRselected' frame ## min of 5 chars high for the '.fRlist' frame ##+####################################################################### ## If we allow the window to be resizable, we can pack the listbox ## with '-fill both -expand 1' so that the listbox can be enlarged by ## enlarging the window. ##+####################################################################### set minWinWidthPx [font measure fontTEMP_varwidth \ "Country , State , City # deci-lat deci-long # deg-lat min-lat deg-long min-long"] ## Add some pixels to account for right-left-side window decoration ## (about 8 pixels), about 1 widgets x 4 pixels/widget for borders/padding ## for buttons and labels. set minWinWidthPx [expr {12 + $minWinWidthPx}] ##+############################################################# ## Set MIN HEIGHT: ## 1 char high for the '.fRbuttons' frame ## 1 char high for the '.fRselected' frame ## min of 5 chars high for the '.fRlist' frame ##+############################################################# set CharHeightPx [font metrics fontTEMP_varwidth -linespace] set minWinHeightPx [expr {7 * $CharHeightPx}] ## Add about 28 pixels for top-bottom window decoration, ## about 3 frames/widgets x 4 pixels/frame for each of the ## stacked frames/widgets --- their borders/padding. set minWinHeightPx [expr {40 + $minWinHeightPx}] ## FOR TESTING: # puts "minWinWidthPx = $minWinWidthPx" # puts "minWinHeightPx = $minWinHeightPx" wm minsize . $minWinWidthPx $minWinHeightPx ##+############################################# ## If you want to make the window un-resizable, ## you can use the following statement. ##+############################################# # wm resizable . 0 0 ##+######################################################################## ## Set a TEXT-ARRAY to hold text for buttons & labels on the GUI. ## NOTE: This can aid INTERNATIONALIZATION. This array can ## be set according to a nation/region parameter. ##+######################################################################## ## if { "$VARlocale" == "en"} ## For '.fRbuttons' frame: set aRtext(buttonUSEIT) "UseIt" set aRtext(buttonCANCEL) "Cancel" set aRtext(buttonHELP) "Help" ## For '.fRselected' frame: set aRtext(labelLINEselected) "Selected line:" ## For top of '.fRlist' frame (above the listbox widget): set aRtext(labelSITES) "SITES with latitude & longitude (in signed-decimal-degrees AND in degrees-and-minutes) :" ## END OF if { "$VARlocale" == "en" ##+#################################################################### ##+#################################################################### ## DEFINE *ALL* THE FRAMES: ## TOP-LEVEL FRAMES: ## '.fRbuttons' - to contain several buttons (UseIt,Cancel,Help), ## '.fRselected' - for 2 pairs of labeland text widgets ## '.fRlist' - for a label widget and listbox widget (with x,y scrollbars) ## ##+#################################################################### ##+#################################################################### ## FOR TESTING change 0 to 1: ## (Example1: To see appearance of frames when borders are drawn.) ## (Example2: To see sizes of frames for various '-fill' options.) ## (Example3: To see how frames expand as window is resized.) if {0} { set RELIEF_frame raised set BDwidthPx_frame 2 } else { set RELIEF_frame flat set BDwidthPx_frame 0 } frame .fRbuttons -relief $RELIEF_frame -borderwidth $BDwidthPx_frame frame .fRselected -relief $RELIEF_frame -borderwidth $BDwidthPx_frame frame .fRlist -relief $RELIEF_frame -borderwidth $BDwidthPx_frame ##+######################################################## ## PACK the TOP-LEVEL FRAMES. ##+######################################################## pack .fRbuttons \ -side top \ -anchor nw \ -fill x \ -expand 0 pack .fRselected \ -side top \ -anchor nw \ -fill x \ -expand 0 pack .fRlist \ -side left \ -anchor nw \ -fill both \ -expand 1 ##+################################################################ ## The frames are defined and packed. ##+################################################################ ## START DEFINING & PACKING WIDGETS WITHIN THEIR FRAMES. ##+################################################################ ##+################################################################ ##+######################################################## ## IN THE '.fRbuttons' frame -- DEFINE several BUTTONS --- ## 1 'UseIt' BUTTON, 1 'Cancel' BUTTON, and 1 'Help' BUTTON. ## Also define a pair of LABEL and TEXT widgets. ## THEN PACK THE WIDGETS. ##+######################################################## button .fRbuttons.buttUSEIT \ -text "$aRtext(buttonUSEIT)" \ -font fontTEMP_button \ -padx $PADX_button \ -pady $PADY_button \ -relief raised \ -bd $BDwidthPx_button \ -command {put_vars} button .fRbuttons.buttCANCEL \ -text "$aRtext(buttonCANCEL)" \ -font fontTEMP_button \ -padx $PADX_button \ -pady $PADY_button \ -relief raised \ -bd $BDwidthPx_button \ -command {exit} button .fRbuttons.buttHELP \ -text "$aRtext(buttonHELP)" \ -font fontTEMP_button \ -padx $PADX_button \ -pady $PADY_button \ -relief raised \ -bd $BDwidthPx_button \ -command {popup_msg_var_scroll "$HELPtext"} ## Pack the widgets in frame '.fRbuttons'. pack .fRbuttons.buttUSEIT \ .fRbuttons.buttCANCEL \ .fRbuttons.buttHELP \ -side left \ -anchor w \ -fill none \ -expand 0 ##+######################################################## ## IN THE '.fRselected' frame -- ## DEFINE 2 pairs of LABEL and TEXT widgets. ## THEN PACK them. ##+######################################################## label .fRselected.labLINEselected \ -text "$aRtext(labelLINEselected)" \ -font fontTEMP_label \ -justify left \ -anchor w \ -relief flat \ -padx $PADXpx_label \ -pady $PADYpx_label \ -bd $BDwidthPx_label text .fRselected.txtLINEselected \ -relief raised \ -borderwidth $BDwidthPx_text \ -height 1 \ -width 0 \ -wrap none \ -font fontTEMP_text \ -bg "#99ff99" ## Pack the widgets in frame '.fRselected'. pack .fRselected.labLINEselected \ -side left \ -anchor w \ -fill none \ -expand 0 pack .fRselected.txtLINEselected \ -side left \ -anchor w \ -fill x \ -expand 1 ##+######################################################## ## IN THE '.fRlist' frame -- ## DEFINE 1 LABEL widget and 1 LISTBOX widget, with 2 scrollbars. ## THEN PACK THEM. ##+######################################################## label .fRlist.labelSITES \ -text "$aRtext(labelSITES)" \ -font fontTEMP_label \ -justify left \ -anchor w \ -relief raised \ -padx $PADXpx_label \ -pady $PADYpx_label \ -bd 2 listbox .fRlist.listbox \ -width $rightListboxWidthChars \ -height $rightListboxHeightChars \ -font fontTEMP_listbox \ -relief raised \ -borderwidth 2 \ -state normal \ -yscrollcommand ".fRlist.scrbary set" \ -xscrollcommand ".fRlist.scrbarx set" scrollbar .fRlist.scrbary \ -orient vertical -command ".fRlist.listbox yview" scrollbar .fRlist.scrbarx \ -orient horizontal -command ".fRlist.listbox xview" ## Pack the widgets in frame '.fRlist'. pack .fRlist.labelSITES \ -side top \ -anchor w \ -fill x \ -expand 0 pack .fRlist.scrbary \ -side right \ -anchor e \ -fill y \ -expand 0 pack .fRlist.scrbarx \ -side bottom \ -anchor sw \ -fill x \ -expand 0 pack .fRlist.listbox \ -side top \ -anchor nw \ -fill both \ -expand 1 ##+####################################### ## END OF MAIN SECTION TO SETUP THE GUI. ## FRAMES AND WIDGETS ARE DEFINED. ##+####################################### ##+##################################################################### ##+##################################################################### ## BINDINGS section: ##+##################################################################### ##+##################################################################### bind .fRlist.listbox {listbox_select_siteID} ##+##################################################################### ##+##################################################################### ## DEFINE PROCEDURES: ## 'listbox_select_siteID' - called by a button1-release binding on ## the SiteIDs listbox widget. ## ## 'put_vars' - called by the 'UseIt' button ## ## 'popup_msg_var_scroll' - called by the 'Help' button ##+##################################################################### ##+##################################################################### ##+################################################################ ## PROC 'listbox_select_siteID' ##+################################################################ ## PURPOSE: Sets some 'site-ID' variables depending on the ## line selected in the SiteIDs listbox . ## ## CALLED BY: binding on the SiteIDs listbox widget ##+################################################################ proc listbox_select_siteID {} { ## FOR TESTING: (dummy out proc) # return global selectedLINE set sel_index [ .fRlist.listbox curselection ] if { $sel_index != "" } { set selectedLINE [ .fRlist.listbox get $sel_index ] set TEMPlist [split $selectedLINE #] set beforeHASH [lindex $TEMPlist 0] } ## FOR TESTING: # puts "listbox_select_siteID: selectedLINE = $selectedLINE" ## Exit if a comment-line was selected. if {"$beforeHASH" == ""} {return} ## Otherwise put the selected line in a text line on the GUI. .fRselected.txtLINEselected delete 1.0 end .fRselected.txtLINEselected insert end "$selectedLINE" } ## END OF PROC 'listbox_select_siteID' ##+##################################################################### ## PROC: 'put_vars' ## ## PURPOSED: Put contents of the line selected from the listbox ## to standard output. ## ## CALLED BY: button .fRbuttons.buttUSEIT ##+##################################################################### proc put_vars { } { global selectedLINE puts "$selectedLINE" exit } ## END of proc 'puts_vars' ##+######################################################################## ## PROC 'popup_msg_var_scroll' ##+######################################################################## ## PURPOSE: Report help or error conditions to the user. ## CALLED BY: 'help' button ##+######################################################################## ## To have more control over the formatting of the message (esp. ## words per line), we use this 'toplevel-text' method, ## rather than the 'tk_dialog' method -- like on page 574 of the book ## by Hattie Schroeder & Mike Doyel,'Interactive Web Applications ## with Tcl/Tk', Appendix A "ED, the Tcl Code Editor". ##+######################################################################## proc popup_msg_var_scroll { VARtext } { ## global fontTEMP_text #; Not needed. 'wish' makes this global. ## global env # bell # bell ################################################# ## Set VARwidth & VARheight from $VARtext. ################################################# ## To get VARheight, ## split at '\n' (newlines) and count 'lines'. ################################################# set VARlist [ split $VARtext "\n" ] ## For testing: # puts "VARlist: $VARlist" set VARheight [ llength $VARlist ] ## For testing: # puts "VARheight: $VARheight" ################################################# ## To get VARwidth, ## loop through the 'lines' getting length ## of each; save max. ################################################# set VARwidth 0 ############################################# ## LOOK AT EACH LINE IN THE LIST. ############################################# foreach line $VARlist { ############################################# ## Get the length of the line. ############################################# set LINEwidth [ string length $line ] if { $LINEwidth > $VARwidth } { set VARwidth $LINEwidth } } ## END OF foreach line $VARlist ## For testing: # puts "VARwidth: $VARwidth" ############################################################### ## NOTE: VARwidth works for a fixed-width font used for the ## text widget ... BUT the programmer may need to be ## careful that the contents of VARtext are all ## countable characters by the 'string length' command. ############################################################### ##################################### ## SETUP 'TOP LEVEL' HELP WINDOW. ##################################### catch {destroy .topmsg} toplevel .topmsg # wm geometry .topmsg 600x400+100+50 wm geometry .topmsg +100+50 wm title .topmsg "Note" # wm title .topmsg "Note to $env(USER)" wm iconname .topmsg "Note" ##################################### ## DEFINE & PACK TEXT WIDGET. ##################################### text .topmsg.text \ -wrap none \ -font fontTEMP_text \ -width $VARwidth \ -height $VARheight \ -bg "#f0f0f0" \ -relief raised \ -bd 2 \ -yscrollcommand ".topmsg.scrolly set" \ -xscrollcommand ".topmsg.scrollx set" scrollbar .topmsg.scrolly \ -orient vertical \ -command ".topmsg.text yview" scrollbar .topmsg.scrollx \ -orient horizontal \ -command ".topmsg.text xview" ## Pack the scrollbars BEFORE the text widget, ## so that the text does not monopolize the space. pack .topmsg.scrolly \ -side right \ -anchor center \ -fill y \ -expand 0 ## DO NOT USE '-expand 1' HERE on the Y-scrollbar. ## THAT ALLOWS Y-SCROLLBAR TO EXPAND AND PUTS ## BLANK SPACE BETWEEN Y-SCROLLBAR & THE TEXT AREA. pack .topmsg.scrollx \ -side bottom \ -anchor center \ -fill x \ -expand 0 ## DO NOT USE '-expand 1' HERE on the X-scrollbar. ## THAT KEEPS THE TEXT AREA FROM EXPANDING. pack .topmsg.text \ -side top \ -anchor center \ -fill both \ -expand 1 ##################################### ## DEFINE & PACK OK BUTTON WIDGET. ##################################### button .topmsg.butt \ -text "OK" \ -command "destroy .topmsg" pack .topmsg.butt \ -side bottom \ -anchor center \ -fill none \ -expand 0 ##################################### ## LOAD MSG INTO TEXT WIDGET. ##################################### ## .topmsg.text delete 1.0 end .topmsg.text insert end $VARtext .topmsg.text configure -state disabled } ## END OF PROC 'popup_msg_var_scroll' ##+############################################### ## END OF PROCS SECTION. ##+############################################### ## SET HELP TEXT variable. ##+############################################### set HELPtext \ " ***** Tk SITE (and Latitude-Longitude) SELECTOR Utility ***** This Tk GUI script provides a GUI for SELECTING A SITE (such as a city or geographic location on the Earth) and showing the latitude-longitude location of that site (the approximate middle of the site). The location data is accurate to degrees and minutes --- in other words, accurate to one/sixtieth of a degree. By clicking on a 'UseIt' button on the GUI, a 'results string' is written to 'stdout' (standard output). The 'results string' includes the site ID (country name, state/province name, city name, etc.) along with the latitude and longitude location of the site. The 'results string' includes the latitude-longitude location in 2 forms: - decimal degrees, such as 45.50 and - degrees and minutes, such as 45 30. The hash sign (#) is used as a separator in front of the decimal-degrees location and in front of the degrees-minutes location. Example: United States, Maine, Acadia National Park # 44.35 -68.21 # 44 21 N 68 12 W The 'site ID' may take various string forms. Examples: - United States, California, San Francisco - England, London - United States, Wyoming, Yellowstone Park - Australia, Queensland, ... - Atlantic Ocean, Bermuda, ... - Pacific Ocean, Fiji, ... The 'N' and 'S' indicators on a degrees-minutes latitude location indicate North or South of the equator. The 'E' and 'W' indicators on a degrees-minutes longitude location indicate East or West of the zero-longitude (through Greenwich, England). A negative decimal-degrees latitude location indicates South of the equator. An unsigned decimal-degrees latitude location indicates North of the equator. A negative decimal-degrees longitude location indicates West of zero-longitude. An unsigned decimal-degrees longitude location indicates East of the zero-longitude. ********* OPERATION: ********* After the user has chosen a site from a scrolling listbox, the user can click on a 'UseIt' button, and the 'results string' is sent to 'stdout'. With this 'selection' capability, this Tk script can be called IN A SHELL SCRIPT OR IN ANOTHER TK SCRIPT, so that this Tk script can ACT AS A SITE-LATITUDE-LONGITUDE SELECTOR utility. ************ SOME SOURCES of site-latitude-longitude data: ************ The data on the initial implementation are grouped in the following way: - U.S. cities - Canadian cities - World cities - World countries (approx. middle of each country) - U.S. national parks A person who implements this script may wish to change the order of the lines in the listbox --- AND he/she may wish to add (or remove) items to the listbox. Here are some sources for confirming the latitude and longitude data for each of these 'sites' --- or for adding more 'site-lines' to the listbox: - http://www.factmonster.com/ipka/A0001796.html - 'Latitude and Longitude of U.S. and Canadian Cities' - http://dev.maxmind.com/geoip/legacy/codes/state_latlon/ - 'Average Latitude and Longitude for U.S. States' - http://www.factmonster.com/ipka/A0001769.html - 'Latitude and Longitude of World Cities' - http://www.infoplease.com/ipa/A0001769.html - 'Latitude and Longitude of World's Largest Cities' - https://en.wikipedia.org/wiki/List_of_cities_by_latitude - 'List of cities by latitude' - https://en.wikipedia.org/wiki/List_of_cities_by_longitude - 'List of cities by longitude' - http://dev.maxmind.com/geoip/legacy/codes/country_latlon/ - 'Average Latitude and Longitude for Countries' - https://en.wikipedia.org/wiki/List_of_national_parks_of_the_United_States - 'List of national parks of the United States' (see 'Location' column) " ##+############################################### ##+############################################### ## ADDITONAL GUI INITIALIZATION section FOLLOWS. ##+############################################### ##+############################################### ##+###################################################### ## LOAD the SiteIDs listbox --- in Sections: ## - world cities (United States first, then Canada) ## - world cities (other countries, alphabetically) ## - world countries (U.S. first, others alphabetically) ## - world parks (U.S. first, others alphabetically) ##+###################################################### .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "## UNITED STATES CITIES: (average latitude and longitude)" .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "United States, Alabama, Birmingham # 33.50 -86.8333 # 33 30 N 86 50 W" .fRlist.listbox insert end \ "United States, Alabama, Mobile # 30.70 -88.05 # 30 42 N 88 3 W" .fRlist.listbox insert end \ "United States, Alabama, Montgomery # 32.35 -86.0166 # 32 21 N 86 1 W" .fRlist.listbox insert end \ "United States, Alaska, Anchorage # 61.2166 -149.90 # 61 13 N 149 54 W" .fRlist.listbox insert end \ "United States, Alaska, Juneau # 58.30 -134.40 # 58 18 N 134 24 W" .fRlist.listbox insert end \ "United States, Arizona, Flagstaff # 35.2166 -111.6833 # 35 13 N 111 41 W" .fRlist.listbox insert end \ "United States, Arizona, Phoenix # 33.4833 -112.0666 # 33 29 N 112 4 W" .fRlist.listbox insert end \ "United States, Arkansas, Hot Springs # 34.5166 -93.05 # 34 31 N 93 3 W" .fRlist.listbox insert end \ "United States, California, Los Angeles # 34.05 -118.25 # 34 3 N 118 15 W" .fRlist.listbox insert end \ "United States, California, Oakland # 37.80 -122.2666 # 37 48 N 122 16 W" .fRlist.listbox insert end \ "United States, California, Sacramento # 38.5833 -121.50 # 38 35 N 121 30 W" .fRlist.listbox insert end \ "United States, California, San Diego # 32.70 -117.01666 # 32 42 N 117 1 W" .fRlist.listbox insert end \ "United States, California, San Francisco # 37.7833 -122.4333 # 37 47 N 122 26 W" .fRlist.listbox insert end \ "United States, California, San Jose # 37.3333 -121.8833 # 37 20 N 121 53 W" .fRlist.listbox insert end \ "United States, Colorado, Denver # 39.75 -105.00 # 39 45 N 105 0 W" .fRlist.listbox insert end \ "United States, Connecticutt, New Haven # 41.3166 -72.9166 # 41 19 N 72 55 W" .fRlist.listbox insert end \ "United States, District of Columbia, Washington D.C. # 38.8833 -77.0333 # 38 53 N 77 02 W" .fRlist.listbox insert end \ "United States, Florida, Jacksonville # 30.3666 -81.6666 # 30 22 N 81 40 W" .fRlist.listbox insert end \ "United States, Florida, Key West # 24.55 -81.80 # 24 33 N 81 48 W" .fRlist.listbox insert end \ "United States, Florida, Miami # 25.7666 -80.20 # 25 46 N 80 12 W" .fRlist.listbox insert end \ "United States, Florida, Tampa # 27.95 -82.45 # 27 57 N 82 27 W" .fRlist.listbox insert end \ "United States, Georgia, Atlanta # 33.75 -84.3833 # 33 45 N 84 23 W" .fRlist.listbox insert end \ "United States, Georgia, Savannah # 32.0833 -81.0833 # 32 5 N 81 5 W" .fRlist.listbox insert end \ "United States, Hawaii, Honolulu # 21.30 -157.8333 # 21 18 N 157 50 W" .fRlist.listbox insert end \ "United States, Idaho, Boise # 43.60 -116.2166 # 43 36 N 116 13 W" .fRlist.listbox insert end \ "United States, Idaho, Idaho Falls # 43.50 -112.0166 # 43 30 N 112 1 W" .fRlist.listbox insert end \ "United States, Illinois, Chicago # 41.8333 -87.6166 # 41 50 N 87 37 W" .fRlist.listbox insert end \ "United States, Illinois, Springfield # 39.80 -89.6333 # 39 48 N 89 38 W" .fRlist.listbox insert end \ "United States, Indiana, Indianapolis # 39.7666 -86.1666 # 39 46 N 86 10 W" .fRlist.listbox insert end \ "United States, Iowa, Des Moines # 41.5833 -93.6166 # 41 35 N 93 37 W" .fRlist.listbox insert end \ "United States, Iowa, Dubuque # 42.5166 -90.0666 # 42 31 N 90 4 W" .fRlist.listbox insert end \ "United States, Kansas, Wichita # 37.7166 -97.2833 # 37 43 N 97 17 W" .fRlist.listbox insert end \ "United States, Kentucky, Louisville # 38.25 -85.7666 # 38 15 N 85 46 W" .fRlist.listbox insert end \ "United States, Louisiana, New Orleans # 29.95 -90.0666 # 29 57 N 90 4 W" .fRlist.listbox insert end \ "United States, Louisiana, Shreveport # 32.4666 -93.70 # 32 28 N 93 42 W" .fRlist.listbox insert end \ "United States, Maine, Portland # 43.6666 -70.25 # 43 40 N 70 15 W" .fRlist.listbox insert end \ "United States, Maryland, Baltimore # 39.30 -76.6333 # 39 18 N 76 38 W" .fRlist.listbox insert end \ "United States, Massachusetts, Boston # 42.35 -71.0833 # 42 21 N 71 5 W" .fRlist.listbox insert end \ "United States, Massachusetts, Springfield # 42.10 -72.5666 # 42 6 N 72 34 W" .fRlist.listbox insert end \ "United States, Michigan, Detroit # 42.3333 -83.05 # 42 20 N 83 3 W" .fRlist.listbox insert end \ "United States, Minnesota, Duluth # 46.8166 -92.0833 # 46 49 N 92 5 W" .fRlist.listbox insert end \ "United States, Minnesota, Minneapolis # 44.9833 -93.2333 # 44 59 N 93 14 W" .fRlist.listbox insert end \ "United States, Mississippi, Jackson # 32.3333 -90.20 # 32 20 N 90 12 W" .fRlist.listbox insert end \ "United States, Missouri, Kansas City # 39.10 -94.5833 # 39 6 N 94 35 W" .fRlist.listbox insert end \ "United States, Missouri, Springfield # 37.2166 -93.2833 # 37 13 N 93 17 W" .fRlist.listbox insert end \ "United States, Missouri, St. Louis # 38.5833 -90.20 # 38 35 N 90 12 W" .fRlist.listbox insert end \ "United States, Montana, Helena # 46.5833 -112.0333 # 46 35 N 112 2 W" .fRlist.listbox insert end \ "United States, Nebraska, Lincoln # 40.8333 -96.6666 # 40 50 N 96 40 W" .fRlist.listbox insert end \ "United States, Nebraska, Omaha # 41.25 -95.9333 # 41 15 N 95 56 W" .fRlist.listbox insert end \ "United States, Nevada, Las Vegas # 36.1666 -115.20 # 36 10 N 115 12 W" .fRlist.listbox insert end \ "United States, Nevada, Reno # 39.50 -119.8166 # 39 30 N 119 49 W" .fRlist.listbox insert end \ "United States, New Hampshire, Manchester # 43.00 -71.50 # 43 0 N 71 30 W" .fRlist.listbox insert end \ "United States, New Jersey, Newark # 40.7333 -74.1666 # 40 44 N 74 10 W" .fRlist.listbox insert end \ "United States, New Mexico, Albuquerque # 35.0833 -106.65 # 35 05 N 106 39 W" .fRlist.listbox insert end \ "United States, New Mexico, Carlsbad # 32.4333 -104.25 # 32 26 N 104 15 W" .fRlist.listbox insert end \ "United States, New Mexico, Santa Fe # 35.6833 -105.95 # 35 41 N 105 57 W" .fRlist.listbox insert end \ "United States, New York, Albany # 42.6666 -73.75 # 42 40 N 73 45 W" .fRlist.listbox insert end \ "United States, New York, Buffalo # 42.9166 -78.8333 # 42 55 N 78 50 W" .fRlist.listbox insert end \ "United States, New York, New York City # 40.7833 -73.9666 # 40 47 N 73 58 W" .fRlist.listbox insert end \ "United States, New York, Syracuse # 43.0333 -76.1333 # 43 2 N 76 8 W" .fRlist.listbox insert end \ "United States, North Carolina, Charlotte # 35.2333 -80.8333 # 35 14 N 80 50 W" .fRlist.listbox insert end \ "United States, North Carolina, Raleigh # 35.7666 -78.65 # 35 46 N 78 39 W" .fRlist.listbox insert end \ "United States, North Carolina, Wilmington # 34.2333 -77.95 # 34 14 N 77 57 W" .fRlist.listbox insert end \ "United States, North Dakota, Bismarck # 46.80 -100.7833 # 46 48 N 100 47 W" .fRlist.listbox insert end \ "United States, North Dakota, Fargo # 46.8666 -96.80 # 46 52 N 96 48 W" .fRlist.listbox insert end \ "United States, Ohio, Cincinnati # 39.1333 -84.50 # 39 8 N 84 30 W" .fRlist.listbox insert end \ "United States, Ohio, Cleveland # 41.4666 -81.6166 # 41 28 N 81 37 W" .fRlist.listbox insert end \ "United States, Ohio, Toledo # 41.65 -83.55 # 41 39 N 83 33 W" .fRlist.listbox insert end \ "United States, Oklahoma, Oklahoma City # 35.4333 -97.4666 # 35 26 N 97 28 W" .fRlist.listbox insert end \ "United States, Oklahoma, Tulsa # 36.15 -95.9833 # 36 09 N 95 59 W" .fRlist.listbox insert end \ "United States, Oregon, Portland # 45.5166 -122.6833 # 45 31 N 122 41 W" .fRlist.listbox insert end \ "United States, Pennsylvania, Philadelphia # 39.95 -75.1666 # 39 57 N 75 10 W" .fRlist.listbox insert end \ "United States, Pennsylvania, Pittsburgh # 40.45 -79.95 # 40 27 N 79 57 W" .fRlist.listbox insert end \ "United States, Rhode Island, Providence # 41.8333 -71.40 # 41 50 N 71 24 W" .fRlist.listbox insert end \ "United States, South Carolina, Charleston # 32.7833 -79.9333 # 32 47 N 79 56 W" .fRlist.listbox insert end \ "United States, South Carolina, Columbia # 34.00 -81.0333 # 34 0 N 81 2 W" .fRlist.listbox insert end \ "United States, South Dakota, Pierre # 44.3666 -100.35 # 44 22 N 100 21 W" .fRlist.listbox insert end \ "United States, South Dakota, Sioux Falls # 43.55 -96.7333 # 43 33 N 96 44 W" .fRlist.listbox insert end \ "United States, Tennesee, Knoxville # 35.95 -83.9333 # 35 57 N 83 56 W" .fRlist.listbox insert end \ "United States, Tennesee, Memphis # 35.15 -90.05 # 35 9 N 90 3 W" .fRlist.listbox insert end \ "United States, Tennesee, Nashville # 36.1666 -86.7833 # 36 10 N 86 47 W" .fRlist.listbox insert end \ "United States, Texas, Amarillo # 35.1833 -101.0833 # 35 11 N 101 5 W" .fRlist.listbox insert end \ "United States, Texas, Austin # 30.2666 -97.7333 # 30 16 N 97 44 W" .fRlist.listbox insert end \ "United States, Texas, Dallas # 32.7666 -96.7666 # 32 46 N 96 46 W" .fRlist.listbox insert end \ "United States, Texas, El Paso # 31.7666 -106.4833 # 31 46 N 106 29 W" .fRlist.listbox insert end \ "United States, Texas, Fort Worth # 32.7166 -97.0166 # 32 43 N 97 1 W" .fRlist.listbox insert end \ "United States, Texas, Houston # 29.75 -95.35 # 29 45 N 95 21 W" .fRlist.listbox insert end \ "United States, Texas, San Antonio # 29.3833 -98.55 # 29 23 N 98 33 W" .fRlist.listbox insert end \ "United States, Utah, Salt Lake City # 40.7666 -111.90 # 40 46 N 111 54 W" .fRlist.listbox insert end \ "United States, Vermont, Montpelier # 44.25 -72.05 # 44 15 N 72 3 W" .fRlist.listbox insert end \ "United States, Virginia, Richmond # 37.55 -77.0333 # 37 33 N 77 2 W" .fRlist.listbox insert end \ "United States, Virginia, Roanoke # 37.2833 -79.95 # 37 17 N 79 57 W" .fRlist.listbox insert end \ "United States, Virginia, Virginia Beach # 36.85 -75.9666 # 36 51 N 75 58 W" .fRlist.listbox insert end \ "United States, Washington, Seattle # 47.6166 -122.3333 # 47 37 N 122 20 W" .fRlist.listbox insert end \ "United States, Washington, Spokane # 47.6666 -117.4333 # 47 40 N 117 26 W" .fRlist.listbox insert end \ "United States, West Virginia, Charleston # 38.35 -81.6333 # 38 21 N 81 38 W" .fRlist.listbox insert end \ "United States, Wisconsin, Milwaukee # 43.0333 -87.9166 # 43 2 N 87 55 W" .fRlist.listbox insert end \ "United States, Wyoming, Cheyenne # 41.15 -104.8666 # 41 9 N 104 52 W" ##+####################### ## CANADA CITIES: ##+####################### .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "## CANADA CITIES: (average latitude and longitude)" .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "Canada, Alberta, Edmonton # 53.5666 -113.4666 # 53 34 N 113 28 W" .fRlist.listbox insert end \ "Canada, Alberta, Calgary # 51.0166 -114.0166 # 51 1 N 114 1 W" .fRlist.listbox insert end \ "Canada, British Columbia, Vancouver # 49.2166 -123.10 # 49 13 N 123 06 W" .fRlist.listbox insert end \ "Canada, Manitoba, Winnipeg # 49.90 -97.1166 # 49 54 N 97 7 W" .fRlist.listbox insert end \ "Canada, New Brunswick, St. John # 45.30 -66.1666 # 45 18 N 66 10 W" .fRlist.listbox insert end \ "Canada, Ontario, Ottawa # 45.40 -75.7166 # 45 24 N 75 43 W" .fRlist.listbox insert end \ "Canada, Quebec, Montreal # 45.50 -73.5833 # 45 30 N 73 35 W" .fRlist.listbox insert end \ "Canada, Quebec, Quebec City # 46.8166 -71.1833 # 46 49 N 71 11 W" .fRlist.listbox insert end \ "Canada, Saskatchewan, Moose Jaw # 50.6166 -105.5166 # 50 37 N 105 31 W" ##+####################### ## WORLD CITIES (non-U.S.): ##+####################### .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "## WORLD CITIES: (average latitude and longitude)" .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "Algeria, Algiers # 36.8333 3.00 # 36 50 N 3 0 E" .fRlist.listbox insert end \ "Argentina, Buenos Aires # -34.5833 -58.3666 # 34 35 S 58 22 W" .fRlist.listbox insert end \ "Australia, Adelaide # -34.9166 138.60 # 34 55 S 138 36 E" .fRlist.listbox insert end \ "Australia, Perth # -31.95 115.8666 # 31 57 S 115 52 E" .fRlist.listbox insert end \ "Australia, Sydney # -34.00 151.00 # 34 0 S 151 0 E" .fRlist.listbox insert end \ "Austria, Vienna # 48.2333 16.3333 # 48 14 N 16 20 E" .fRlist.listbox insert end \ "Belgium, Brussels # 50.8666 4.3666 # 50 52 N 4 22 E" .fRlist.listbox insert end \ "Bolivia, La Paz # -16.45 -68.3666 # 16 27 S 68 22 W" .fRlist.listbox insert end \ "Brazil, Rio de Janeiro # -22.95 -43.20 # 22 57 S 43 12 W" .fRlist.listbox insert end \ "Bulgaria, Sofia # 42.6666 23.3333 # 42 40 N 23 20 E" .fRlist.listbox insert end \ "Chile, Santiago # -33.4666 -70.75 # 33 28 S 70 45 W" .fRlist.listbox insert end \ "China, Beijing # 39.9166 116.4166 # 39 55 N 116 25 E" .fRlist.listbox insert end \ "China, Hong Kong # 2.3333 114.1833 # 2 20 N 114 11 E" .fRlist.listbox insert end \ "Colombia, Bogotá # 4.5333 -74.25 # 4 32 N 74 15 W" .fRlist.listbox insert end \ "Cuba, Havana # 23.1333 -82.3833 # 23 8 N 82 23 W " .fRlist.listbox insert end \ "Czech Republic, Prague # 50.0833 14.4333 # 50 5 N 14 26 E" .fRlist.listbox insert end \ "Denmark, Copenhagen # 55.6666 12.5666 # 55 40 N 12 34 E" .fRlist.listbox insert end \ "Egypt, Cairo # 30.0333 31.35 # 30 2 N 31 21 E" .fRlist.listbox insert end \ "England, London # 51.5333 -0.0833 # 51 32 N 0 5 W" .fRlist.listbox insert end \ "Ecuador, Guayaquil # -2.1666 -79.9333 # 2 10 S 79 56 W" .fRlist.listbox insert end \ "Finland, Helsinki # 60.1666 25.00 # 60 10 N 25 0 E" .fRlist.listbox insert end \ "France, Marseilles # 43.3333 5.3333 # 43 20 N 5 20 E" .fRlist.listbox insert end \ "France, Paris # 48.80 2.3333 # 48 48 N 2 20 E" .fRlist.listbox insert end \ "Germany, Berlin # 52.50 13.4166 # 52 30 N 13 25 E" .fRlist.listbox insert end \ "Greece, Athens # 37.9666 23.7166 # 37 58 N 23 43 E" .fRlist.listbox insert end \ "Guatemala, Guatemala City # 14.6166 -90.5166 # 14 37 N 90 31 W" .fRlist.listbox insert end \ "Hungary, Budapest # 47.50 19.0833 # 47 30 N 19 5 E" .fRlist.listbox insert end \ "Iceland, Reykjavík # 64.0666 -21.9666 # 64 4 N 21 58 W" .fRlist.listbox insert end \ "India, Bombay # 19.00 72.80 # 19 0 N 72 48 E" .fRlist.listbox insert end \ "Indonesia, Jakarta # -6.2666 106.80 # 6 16 S 106 48 E" .fRlist.listbox insert end \ "Iran, Teheran # 35.75 51.75 # 35 45 N 51 45 E" .fRlist.listbox insert end \ "Ireland, Dublin # 53.3333 -6.25 # 53 20 N 6 15 W" .fRlist.listbox insert end \ "Italy. Milan # 45.45 9.1666 # 45 27 N 9 10 E" .fRlist.listbox insert end \ "Italy, Rome # 41.90 12.45 # 41 54 N 12 27 E" .fRlist.listbox insert end \ "Italy, Venice # 45.4333 12.3333 # 45 26 N 12 20 E" .fRlist.listbox insert end \ "Jamaica, Kingston # 17.9833 -76.8166 # 17 59 N 76 49 W" .fRlist.listbox insert end \ "Japan, Tokyo # 35.6666 139.75 # 35 40 N 139 45 E" .fRlist.listbox insert end \ "Kenya, Nairobi # -1.4166 36.9166 # 1 25 S 36 55 E" .fRlist.listbox insert end \ "Libya, Tripoli # 32.95 13.20 # 32 57 N 13 12 E" .fRlist.listbox insert end \ "Malaysia, Kuala Lumpur # 3.1333 101.70 # 3 8 N 101 42 E" .fRlist.listbox insert end \ "Mexico, Mexico City # 19.4333 -99.1166 # 19 26 N 99 7 W" .fRlist.listbox insert end \ "Myanmar, Rangoon # 16.8333 96.00 # 16 50 N 96 0 E" .fRlist.listbox insert end \ "Netherlands, Amsterdam # 52.3666 4.8833 # 52 22 N 4 53 E" .fRlist.listbox insert end \ "New Zealand, Auckland # -36.8666 174.75 # 36 52 S 174 45 E " .fRlist.listbox insert end \ "Norway, Oslo # 59.95 10.70 # 59 57 N 10 42 E" .fRlist.listbox insert end \ "Panama, Panama City # 8.9666 -79.5333 # 8 58 N 79 32 W" .fRlist.listbox insert end \ "Paraguay, Asunción # -25.25 -57.6666 # 25 15 S 57 40 W" .fRlist.listbox insert end \ "Peru, Lima # -12.00 -77.0333 # 12 0 S 77 2 W" .fRlist.listbox insert end \ "Philippines, Manila # 14.5833 120.95 # 14 35 N 120 57 E" .fRlist.listbox insert end \ "Poland, Warsaw # 52.2333 21.00 # 52 14 N 21 0 E" .fRlist.listbox insert end \ "Portugal, Lisbon # 38.7333 -9.15 # 38 44 N 9 9 W" .fRlist.listbox insert end \ "Puerto Rico, San Juan # 18.50 -66.1666 # 18 30 N 66 10 W" .fRlist.listbox insert end \ "Romania, Bucharest # 44.4166 26.1166 # 44 25 N 26 7 E" .fRlist.listbox insert end \ "Russia, Moscow # 55.75 37.60 # 55 45 N 37 36 E" .fRlist.listbox insert end \ "Russia, Vladivostok # 43.1666 132.00 # 43 10 N 132 0 E" .fRlist.listbox insert end \ "Saudi Arabia, Mecca # 21.4833 39.75 # 21 29 N 39 45 E" .fRlist.listbox insert end \ "Scotland, Aberdeen # 57.15 -2.15 # 57 9 N 2 9 W" .fRlist.listbox insert end \ "Serbia, Belgrade # 44.8666 20.5333 # 44 52 N 20 32 E" .fRlist.listbox insert end \ "South Africa, Johannesburg # -26.20 28.0666 # 26 12 S 28 4 E" .fRlist.listbox insert end \ "Spain, Barcelona # 41.3833 2.15 # 41 23 N 2 9 E " .fRlist.listbox insert end \ "Spain, Madrid # 40.4333 -3.70 # 40 26 N 3 42 W" .fRlist.listbox insert end \ "Sweden, Stockholm # 59.2833 18.05 # 59 17 N 18 3 E" .fRlist.listbox insert end \ "Switzerland, Zürich # 47.35 8.5166 # 47 21 N 8 31 E" .fRlist.listbox insert end \ "Tasmania, Hobart # -42.8666 147.3166 # 42 52 S 147 19 E" .fRlist.listbox insert end \ "Thailand, Bangkok # 13.75 100.50 # 13 45 N 100 30 E" .fRlist.listbox insert end \ "Turkey, Ankara # 39.9166 32.9166 # 39 55 N 32 55 E" .fRlist.listbox insert end \ "Ukraine, Odessa # 46.45 30.80 # 46 27 N 30 48 E" .fRlist.listbox insert end \ "Uruguay, Montevideo # -34.8833 -56.1666 # 34 53 S 56 10 W" .fRlist.listbox insert end \ "Venezuela, Caracas # 10.4666 -67.0333 # 10 28 N 67 2 W" ##+########## ## COUNTRIES: ##+########## .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "## WORLD COUNTRIES: (average latitude and longitude)" .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "US, United States # 38.0000 -97.0000 # 38 N 97 W" .fRlist.listbox insert end \ "AE, United Arab Emirates # 24.0000 54.0000 # 24 N 54 E" .fRlist.listbox insert end \ "AF, Afghanistan # 33.0000 65.0000 # 33 N 65 E" .fRlist.listbox insert end \ "AR, Argentina # -34.0000 -64.0000 # 34 S 64 W" .fRlist.listbox insert end \ "AS, American Samoa # -14.3333 -170.0000 # " .fRlist.listbox insert end \ "AT, Austria # 47.3333 13.3333 # " .fRlist.listbox insert end \ "AU, Australia # -27.0000 133.0000 # 27 S 133 E" .fRlist.listbox insert end \ "AW, Aruba # 12.5000 -69.9667 # " .fRlist.listbox insert end \ "BD, Bangladesh # 24.0000 90.0000 # 24 N 90 E" .fRlist.listbox insert end \ "BE, Belgium # 50.8333 4.0000 # 43 N 4 E" .fRlist.listbox insert end \ "BG, Bulgaria # 43.0000 25.0000 # 43 N 25 E" .fRlist.listbox insert end \ "BH, Bahrain # 26.0000 50.5500 # " .fRlist.listbox insert end \ "BM, Bermuda # 32.3333 -64.7500 # " .fRlist.listbox insert end \ "BO, Bolivia # -17.0000 -65.0000 # 17 S 65 W" .fRlist.listbox insert end \ "BR, Brazil # -10.0000 -55.0000 # 10 S 55 W" .fRlist.listbox insert end \ "BS, Bahamas # 24.2500 -76.0000 # " .fRlist.listbox insert end \ "BY, Belarus # 53.0000 28.0000 # 53 N 28 E" .fRlist.listbox insert end \ "BZ, Belize # 17.2500 -88.7500 # " .fRlist.listbox insert end \ "CA, Canada # 60.0000 -95.0000 # 60 N 95 W" .fRlist.listbox insert end \ "CG, Congo # -1.0000 15.0000 # 1 S 15 E" .fRlist.listbox insert end \ "CH, Switzerland # 47.0000 8.0000 # 47 N 8 E" .fRlist.listbox insert end \ "CL, Chile # -30.0000 -71.0000 # 30 S 71 W" .fRlist.listbox insert end \ "CO, Colombia # 4.0000 -72.0000 # 4 N 72 W" .fRlist.listbox insert end \ "CR, Costa Rica # 10.0000 -84.0000 # 10 N 84 W" .fRlist.listbox insert end \ "CU, Cuba # 21.5000 -80.0000 # " .fRlist.listbox insert end \ "CY, Cyprus # 35.0000 33.0000 # 35 N 33 E" .fRlist.listbox insert end \ "CZ, Czech Republic # 49.7500 15.5000 # " .fRlist.listbox insert end \ "DE, Germany # 51.0000 9.0000 # 51 N 9 E" .fRlist.listbox insert end \ "DK, Denmark # 56.0000 10.0000 # 56 N 10 E" .fRlist.listbox insert end \ "DO, Dominican Republic # 19.0000 -70.6667 # " .fRlist.listbox insert end \ "DZ, Algeria # 28.0000 3.0000 # " .fRlist.listbox insert end \ "EC, Ecuador # -2.0000 -77.5000 # " .fRlist.listbox insert end \ "EE, Estonia # 59.0000 26.0000 # 59 N 26 E" .fRlist.listbox insert end \ "EG, Egypt # 27.0000 30.0000 # 27 N 30 E" .fRlist.listbox insert end \ "ER, Eritrea # 15.0000 39.0000 # 15 N 39 E" .fRlist.listbox insert end \ "ES, Spain # 40.0000 -4.0000 # 40 N 4 W" .fRlist.listbox insert end \ "ET, Ethiopia # 8.0000 38.0000 # 8 N 38 E" .fRlist.listbox insert end \ "FI, Finland # 64.0000 26.0000 # 64 N 26 E" .fRlist.listbox insert end \ "FJ, Fiji # -18.0000 175.0000 # 18 S 175 E" .fRlist.listbox insert end \ "FK, Falkland Islands (Malvinas) # -51.7500 -59.0000 # " .fRlist.listbox insert end \ "FR, France # 46.0000 2.0000 # 46 N 2 E" .fRlist.listbox insert end \ "GA, Gabon # -1.0000 11.7500 # " .fRlist.listbox insert end \ "GB, United Kingdom # 54.0000 -2.0000 # 54 N 2 W" .fRlist.listbox insert end \ "GD, Grenada # 12.1167 -61.6667 # " .fRlist.listbox insert end \ "GE, Georgia # 42.0000 43.5000 # " .fRlist.listbox insert end \ "GH, Ghana # 8.0000 -2.0000 # 8 N 2 W" .fRlist.listbox insert end \ "GL, Greenland # 72.0000 -40.0000 # 72 N 40 W" .fRlist.listbox insert end \ "GR, Greece # 39.0000 22.0000 # 39 N 22 E" .fRlist.listbox insert end \ "GT, Guatemala # 15.5000 -90.2500 # " .fRlist.listbox insert end \ "GU, Guam # 13.4667 144.7833 # " .fRlist.listbox insert end \ "HN, Honduras # 15.0000 -86.5000 # " .fRlist.listbox insert end \ "HR, Croatia # 45.1667 15.5000 # " .fRlist.listbox insert end \ "HT, Haiti # 19.0000 -72.4167 # " .fRlist.listbox insert end \ "HU, Hungary # 47.0000 20.0000 # 47 N 20 E" .fRlist.listbox insert end \ "ID, Indonesia # -5.0000 120.0000 # 5 S 120 E" .fRlist.listbox insert end \ "IE, Ireland # 53.0000 -8.0000 # 53 N 8 W" .fRlist.listbox insert end \ "IL, Israel # 31.5000 34.7500 # " .fRlist.listbox insert end \ "IN, India # 20.0000 77.0000 # 20 N 77 E" .fRlist.listbox insert end \ "IQ, Iraq # 33.0000 44.0000 # 33 N 44 E" .fRlist.listbox insert end \ "IR, Iran # 32.0000 53.0000 # 32 N 53 E" .fRlist.listbox insert end \ "IS, Iceland # 65.0000 -18.0000 # 65 N 18 W" .fRlist.listbox insert end \ "IT, Italy # 42.8333 12.8333 # " .fRlist.listbox insert end \ "JM, Jamaica # 18.2500 -77.5000 # " .fRlist.listbox insert end \ "JO, Jordan # 31.0000 36.0000 # 31 N 36 E" .fRlist.listbox insert end \ "JP, Japan # 36.0000 138.0000 # 36 N 138 E" .fRlist.listbox insert end \ "KE, Kenya # 1.0000 38.0000 # 1 N 38 E" .fRlist.listbox insert end \ "KG, Kyrgyzstan # 41.0000 75.0000 # 41 N 75 E" .fRlist.listbox insert end \ "KH, Cambodia # 13.0000 105.0000 # 13 N 105 E" .fRlist.listbox insert end \ "KP, North Korea # 40.0000 127.0000 # 40 N 127 E" .fRlist.listbox insert end \ "KR, South Korea # 37.0000 127.5000 # 37 N 127 30 E" .fRlist.listbox insert end \ "KW, Kuwait # 29.3375 47.6581 # " .fRlist.listbox insert end \ "KY, Cayman Islands # 19.5000 -80.5000 # " .fRlist.listbox insert end \ "KZ, Kazakhstan # 48.0000 68.0000 # 48 N 68 E" .fRlist.listbox insert end \ "LA, Laos # 18.0000 105.0000 # 18 N 105 E" .fRlist.listbox insert end \ "LB, Lebanon # 33.8333 35.8333 # " .fRlist.listbox insert end \ "LI, Liechtenstein # 47.1667 9.5333 # " .fRlist.listbox insert end \ "LK, Sri Lanka # 7.0000 81.0000 # 7 N 81 E" .fRlist.listbox insert end \ "LR, Liberia # 6.5000 -9.5000 # 6 30 N 9 30 W" .fRlist.listbox insert end \ "LT, Lithuania # 56.0000 24.0000 # 56 N 24 E" .fRlist.listbox insert end \ "LU, Luxembourg # 49.7500 6.1667 # " .fRlist.listbox insert end \ "LV, Latvia # 57.0000 25.0000 # 57 N 25 E" .fRlist.listbox insert end \ "LY, Libya # 25.0000 17.0000 # 25 N 17 E" .fRlist.listbox insert end \ "MA, Morocco # 32.0000 -5.0000 # 32 N 5 W" .fRlist.listbox insert end \ "MC, Monaco # 43.7333 7.4000 # " .fRlist.listbox insert end \ "ME, Montenegro # 42.0000 19.0000 # 42 N 19 E" .fRlist.listbox insert end \ "MG, Madagascar # -20.0000 47.0000 # 20 S 47 E" .fRlist.listbox insert end \ "MH, Marshall Islands # 9.0000 168.0000 # 9 N 168 E" .fRlist.listbox insert end \ "MK, Macedonia # 41.8333 22.0000 # " .fRlist.listbox insert end \ "ML, Mali # 17.0000 -4.0000 # 17 N 4 W" .fRlist.listbox insert end \ "MM, Myanmar # 22.0000 98.0000 # 22 N 98 E" .fRlist.listbox insert end \ "MN, Mongolia # 46.0000 105.0000 # 46 N 105 E" .fRlist.listbox insert end \ "MT, Malta # 35.8333 14.5833 # " .fRlist.listbox insert end \ "MV, Maldives # 3.2500 73.0000 # " .fRlist.listbox insert end \ "MW, Malawi # -13.5000 34.0000 # 13 30 S 34 E" .fRlist.listbox insert end \ "MX, Mexico # 23.0000 -102.0000 # " .fRlist.listbox insert end \ "MY, Malaysia # 2.5000 112.5000 # 2 30 N 122 30 E" .fRlist.listbox insert end \ "MZ, Mozambique # -18.2500 35.0000 # " .fRlist.listbox insert end \ "NA, Namibia # -22.0000 17.0000 # 22 S 17 E" .fRlist.listbox insert end \ "NC, New Caledonia # -21.5000 165.5000 # 21 30 S 165 30 E" .fRlist.listbox insert end \ "NG, Nigeria # 16.0000 8.0000 # 16 N 8 E" .fRlist.listbox insert end \ "NI, Nicaragua # 13.0000 -85.0000 # 13 N 85 W" .fRlist.listbox insert end \ "NL, Netherlands # 52.5000 5.7500 # " .fRlist.listbox insert end \ "NO, Norway # 62.0000 10.0000 # 62 N 10 E" .fRlist.listbox insert end \ "NP, Nepal # 28.0000 84.0000 # 28 N 84 E" .fRlist.listbox insert end \ "NZ, New Zealand # -41.0000 174.0000 # 41 S 174 E" .fRlist.listbox insert end \ "PA, Panama # 9.0000 -80.0000 # 9 N 80 W" .fRlist.listbox insert end \ "PE, Peru # -10.0000 -76.0000 # 10 S 76 W" .fRlist.listbox insert end \ "PF, French Polynesia # -15.0000 -140.0000 # 15 S 140 W" .fRlist.listbox insert end \ "PG, Papua New Guinea # -6.0000 147.0000 # 6 S 147 E" .fRlist.listbox insert end \ "PH, Philippines # 13.0000 122.0000 # 13 N 122 E" .fRlist.listbox insert end \ "PK, Pakistan # 30.0000 70.0000 # 30 N 70 E" .fRlist.listbox insert end \ "PL, Poland # 52.0000 20.0000 # 52 N 20 E" .fRlist.listbox insert end \ "PR, Puerto Rico # 18.2500 -66.5000 # 18 15 N 66 30 W" .fRlist.listbox insert end \ "PT, Portugal # 39.5000 -8.0000 # 39 30 N 8 W" .fRlist.listbox insert end \ "PY, Paraguay # -23.0000 -58.0000 # 23 S 58 W" .fRlist.listbox insert end \ "QA, Qatar # 25.5000 51.2500 # 25 30 N 51 15 E" .fRlist.listbox insert end \ "RO, Romania # 46.0000 25.0000 # 46 N 25 E" .fRlist.listbox insert end \ "RS, Serbia # 44.0000 21.0000 # 44 N 21 E" .fRlist.listbox insert end \ "RU, Russia # 60.0000 100.0000 # 60 N 100 E" .fRlist.listbox insert end \ "RW, Rwanda # -2.0000 30.0000 # 2 S 30 E" .fRlist.listbox insert end \ "SA, Saudi Arabia # 25.0000 45.0000 # 25 N 45 E" .fRlist.listbox insert end \ "SB, Solomon Islands # -8.0000 159.0000 # 8 S 159 E" .fRlist.listbox insert end \ "SD, Sudan # 15.0000 30.0000 # 15 N 30 E" .fRlist.listbox insert end \ "SE, Sweden # 62.0000 15.0000 # 62 N 15 E" .fRlist.listbox insert end \ "SH, Saint Helena # -15.9333 -5.7000 # " .fRlist.listbox insert end \ "SI, Slovenia # 46.0000 15.0000 # 46 N 15 E" .fRlist.listbox insert end \ "SK, Slovakia # 48.6667 19.5000 # " .fRlist.listbox insert end \ "SN, Senegal # 14.0000 -14.0000 # 14 N 14 W" .fRlist.listbox insert end \ "SO, Somalia # 10.0000 49.0000 # 10 N 49 E" .fRlist.listbox insert end \ "SV, El Salvador # 13.8333 -88.9167 # " .fRlist.listbox insert end \ "SY, Syria # 35.0000 38.0000 # 35 N 38 E" .fRlist.listbox insert end \ "SZ, Swaziland # -26.5000 31.5000 # " .fRlist.listbox insert end \ "TD, Chad # 15.0000 19.0000 # 15 N 19 E" .fRlist.listbox insert end \ "TH, Thailand # 15.0000 100.0000 # 15 N 100 E" .fRlist.listbox insert end \ "TN, Tunisia # 34.0000 9.0000 # 34 N 9 E" .fRlist.listbox insert end \ "TR, Turkey # 39.0000 35.0000 # 39 N 35 E" .fRlist.listbox insert end \ "TW, Taiwan # 23.5000 121.0000 # 23 30 N 121 E" .fRlist.listbox insert end \ "TZ, Tanzania # -6.0000 35.0000 # 6 S 35 E" .fRlist.listbox insert end \ "UA, Ukraine # 49.0000 32.0000 # 49 N 32 E" .fRlist.listbox insert end \ "UG, Uganda # 1.0000 32.0000 # 1 N 32 E" .fRlist.listbox insert end \ "UY, Uruguay # -33.0000 -56.0000 # 33 S 56 W" .fRlist.listbox insert end \ "UZ, Uzbekistan # 41.0000 64.0000 # 41 N 64 E" .fRlist.listbox insert end \ "VA, Vatican City State # 41.9000 12.4500 # " .fRlist.listbox insert end \ "VE, Venezuela # 8.0000 -66.0000 # 8 N 66 W" .fRlist.listbox insert end \ "VN, Vietnam # 16.0000 106.0000 # 16 N 106 E" .fRlist.listbox insert end \ "YE, Yemen # 15.0000 48.0000 # 15 N 48 E" .fRlist.listbox insert end \ "ZA, South Africa # -29.0000 24.0000 # 29 S 24 E" .fRlist.listbox insert end \ "ZM, Zambia # -15.0000 30.0000 # 15 S 30 E" .fRlist.listbox insert end \ "ZW, Zimbabwe # -20.0000 30.0000 # 20 S 30 E" ##+########## ## PARKS: ##+########## .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "## WORLD PARKS: (average latitude and longitude)" .fRlist.listbox insert end \ "##" .fRlist.listbox insert end \ "United States, Maine, Acadia National Park # 44.35 -68.21 # 44 21 N 68 12 W" .fRlist.listbox insert end \ "United States, American Samoa # -14.25 -170.68 # 14 15 S 170 41 W" .fRlist.listbox insert end \ "United States, Utah, Arches National Park # 38.68 -109.57 # 38 41 N 109 34 W" .fRlist.listbox insert end \ "United States, South Dakota, Badlands National Park # 43.75 -102.50 # 43 45 N 102 30 W " .fRlist.listbox insert end \ "United States, Texas, Big Bend National Park # 29.25 -103.25 # 29 15 N 103 15 W" .fRlist.listbox insert end \ "United States, Utah, Bryce Canyon National Park # 37.57 -112.18 # 37 34 N 112 11 W" .fRlist.listbox insert end \ "United States, New Mexico, Carlsbad Caverns National Park # 32.17 -104.44 # 32 10 N 104 26 W" .fRlist.listbox insert end \ "United States, Oregon, Crater Lake National Park # 42.94 -122.1 # 42 56 N 122 06 W" .fRlist.listbox insert end \ "United States, California, Death Valley National Park # 36.24 -116.82 # 36 14 N 116 49 W" .fRlist.listbox insert end \ "United States, Alaska, Denali National Park # 63.33 -150.50 # 63 20 N 150 30 W" .fRlist.listbox insert end \ "United States, Florida, Everglades National Park # 25.32 -80.93 # 25 19 N 80 56 W" .fRlist.listbox insert end \ "United States, Montana, Glacier National Park # 48.80 -114.00 # 48 48 N 114 00 W" .fRlist.listbox insert end \ "United States, UArizona, Grand Canyon National Park # 36.06 -112.14 # 36 04 N 112 08 W" .fRlist.listbox insert end \ "United States, Wyoming, Tetons National Park # 43.73 -110.80 # 43 44 N 110 48 W" .fRlist.listbox insert end \ "United States, Colorado, Great Sand Dunes National Park # 37.73 -105.51 # 37 44 N 105 31 W" .fRlist.listbox insert end \ "United States, North Carolina, Great Smoky Mountains National Park # 35.68 -83.53 # 35 41 N 83 32 W" .fRlist.listbox insert end \ "United States, Hawaii, Hawaii Volcanoes National Park # 19.38 -155.20 # 19 23 N 155 12 W" .fRlist.listbox insert end \ "United States, Arkansas, Hot Springs National Park # 34.51 -93.05 # 34 31 N 93 03 W" .fRlist.listbox insert end \ "United States, California, Joshua Tree National Park # 33.79 -115.90 # 33 47 N 115 54 W" .fRlist.listbox insert end \ "United States, California, Kings Canyon National Park # 36.80 -118.55 # 36 48 N 118 33 W" .fRlist.listbox insert end \ "United States, California, Lassen Volcanic National Park # 40.49 -121.51 # 40 29 N 121 31 W" .fRlist.listbox insert end \ "United States, Kentucky, Mammoth Cave National Park # 37.18 -86.10 # 37 11 N 86 06 W" .fRlist.listbox insert end \ "United States, Colorado, Mesa Verde National Park # 37.18 -108.49 # 37 11 N 108 29 W" .fRlist.listbox insert end \ "United States, Washington, Mount Ranier National Park # 46.85 -121.75 # 46 51 N 121 45 W" .fRlist.listbox insert end \ "United States, Washington, North Cascades National Park # 48.70 -121.20 # 48 42 N 121 12 W" .fRlist.listbox insert end \ "United States, Washington, Olympic National Park # 47.97 -123.50 # 47 58 N 123 30 W" .fRlist.listbox insert end \ "United States, Arizona, Painted Desert National Park # 35.07 -109.78 # 35 04 N 109 47 W" .fRlist.listbox insert end \ "United States, California, Redwoods National Park # 41.30 -124.00 # 41 18 N 124 00 W" .fRlist.listbox insert end \ "United States, Colorado, Rocky Mountain National Park # 40.40 -105.58 # 40 24 N 105 35 W" .fRlist.listbox insert end \ "United States, California, Sequoia National Park # 36.43 -118.68 # 36 26 N 118 41 W" .fRlist.listbox insert end \ "United States, Virginia, Shenandoah National Park # 38.53 -78.35 # 38 32 N 78 21 W" .fRlist.listbox insert end \ "United States, Wyoming, Yellowstone National Park # 44.60 -110.50 # 44 36 N 110 30 W" .fRlist.listbox insert end \ "United States, California, Yosemite National Park # 37.83 -119.50 # 37 50 N 119 30 W" .fRlist.listbox insert end \ "United States, Utah, Zion National Park # 37.30 -113.05 # 37 18 N 113 03 W" ##+######################################################################## ## GET an INPUT ARGUMENT VALUE, if any. If none, set a default. ## ## Use this argument to set a listbox line-number to select. ##+######################################################################## if {$argc == 1} { set LINEnum [lindex $argv 0] } else { set LINEnum 3 } ##+############################################ ## Select a line in the listbox ## according to LINEnum. ##+############################################ .fRlist.listbox selection set $LINEnum ##+############################################ ## Set a background color for the ## text-selected display area and ## for several listbox widgets. ## ## Tailor these colors to taste. ##+############################################ .fRselected.txtLINEselected configure -bg "#99ff99" .fRlist.labelSITES configure -bg "#ff9966" .fRlist.listbox configure -bg "#ff0000" .fRlist.listbox configure -selectbackground "#ff9999"