#!/bin/sh
# the next line restarts using wish \
exec wish8.3 "$0" ${1+"$@"}
#############################################################################
# Visual Tcl v1.20 Project
#

#################################
# GLOBAL VARIABLES
#
global seti; 
global widget; 
    set widget(Skymap) {.top22}
    set widget(SkymapButton) {.top22.fra25.but30}
    set widget(SkymapCanvas) {.top22.fra24.cpd20.03}
    set widget(SkymapGaussianButton) {.top22.fra25.but19}
    set widget(SkymapLabel) {.top22.fra24.lab28}
    set widget(SkymapLocsButton) {.top22.fra25.but25}
    set widget(SkymapPulseButton) {.top22.fra25.but26}
    set widget(SkymapSpikeButton) {.top22.fra25.but17}
    set widget(SkymapTripletButton) {.top22.fra25.but27}
    set widget(auto_button) {.top18.fra28.fra30.01}
    set widget(auto_frame) {.top18.fra28.fra30.03.020}
    set widget(auto_frame_top) {.top18.fra28.fra30.03}
    set widget(auto_net_frame) {.top18.fra28.fra31.02}
    set widget(browse_gaussians) {.top30.fra32.fra43.02}
    set widget(browse_groupurl) {.top19.fra21.fra23.fra24.but25}
    set widget(browse_setiHome) {.top17.fra18.fra21.but35}
    set widget(browse_spikes) {.top30.fra32.fra42.02}
    set widget(browse_tksetiDownload) {.top21.fra24.but29}
    set widget(browse_tksetiHome) {.top17.fra18.fra21.but19}
    set widget(browse_users) {.top30.fra32.fra34.but41}
    set widget(browse_userurl) {.top19.fra21.fra23.fra22.but26}
    set widget(canvas) {.top17.fra18.fra18.fra19.017}
    set widget(choose_1) {.top18.fra28.fra30.03.020.021.022.027}
    set widget(choose_2) {.top18.fra28.fra30.03.020.021.028.033}
    set widget(choose_3) {.top18.fra28.fra30.03.020.021.034.039}
    set widget(choose_4) {.top18.fra28.fra30.03.020.040.041.046}
    set widget(choose_5) {.top18.fra28.fra30.03.020.040.047.052}
    set widget(choose_6) {.top18.fra28.fra30.03.020.040.053.058}
    set widget(continue) {.top17.fra18.fra33.07}
    set widget(devThresh_1) {.top18.fra28.fra30.03.020.021.022.fra18}
    set widget(devThresh_2) {.top18.fra28.fra30.03.020.021.028.fra19}
    set widget(devThresh_3) {.top18.fra28.fra30.03.020.021.034.fra20}
    set widget(devThresh_4) {.top18.fra28.fra30.03.020.040.041.fra21}
    set widget(devThresh_5) {.top18.fra28.fra30.03.020.040.047.fra22}
    set widget(devThresh_6) {.top18.fra28.fra30.03.020.040.053.fra23}
    set widget(device_list) {.top20.fra22.cpd25.01}
    set widget(devices) {.top20}
    set widget(famous) {.top30}
    set widget(gaussian) {.top31}
    set widget(gaussians) {.top30.fra32.fra43}
    set widget(interrupt_getClientStatus) {.top17.fra18.fra22.but28}
    set widget(kill) {.top17.fra18.fra33.05}
    set widget(nodial_frame) {.top18.fra28.fra31.02.019.021}
    set widget(norun_frame) {.top18.fra28.fra29.02}
    set widget(pause) {.top17.fra18.fra33.06}
    set widget(pulse) {.top29}
    set widget(rev,.top17) {tkseti}
    set widget(rev,.top17.fra18.cpd19.03) {SkymapCanvas}
    set widget(rev,.top17.fra18.fra17.01.03) {server_str}
    set widget(rev,.top17.fra18.fra18.fra19.016) {scale}
    set widget(rev,.top17.fra18.fra18.fra19.017) {canvas}
    set widget(rev,.top17.fra18.fra20.can17) {canvas}
    set widget(rev,.top17.fra18.fra21.but19) {browse_tksetiHome}
    set widget(rev,.top17.fra18.fra21.but35) {browse_setiHome}
    set widget(rev,.top17.fra18.fra22.but25) {run}
    set widget(rev,.top17.fra18.fra22.but26) {kill}
    set widget(rev,.top17.fra18.fra22.but27) {pause}
    set widget(rev,.top17.fra18.fra22.but28) {interrupt_getClientStatus}
    set widget(rev,.top17.fra18.fra22.fra23.02) {status_str}
    set widget(rev,.top17.fra18.fra33.04) {run}
    set widget(rev,.top17.fra18.fra33.05) {kill}
    set widget(rev,.top17.fra18.fra33.06) {pause}
    set widget(rev,.top17.fra18.fra33.07) {continue}
    set widget(rev,.top18) {setup}
    set widget(rev,.top18.fra22) {setup_general}
    set widget(rev,.top18.fra23) {setup_note_tabs}
    set widget(rev,.top18.fra23.rad25) {setup_tab_general}
    set widget(rev,.top18.fra23.rad26) {setup_tab_helpers}
    set widget(rev,.top18.fra23.rad27) {setup_tab_automodes}
    set widget(rev,.top18.fra26) {setup_help_frame}
    set widget(rev,.top18.fra26.cpd27.03) {setup_help_text}
    set widget(rev,.top18.fra28) {setup_automodes}
    set widget(rev,.top18.fra28.fra29.02) {norun_frame}
    set widget(rev,.top18.fra28.fra30.01) {auto_button}
    set widget(rev,.top18.fra28.fra30.03) {auto_frame_top}
    set widget(rev,.top18.fra28.fra30.03.020) {auto_frame}
    set widget(rev,.top18.fra28.fra30.03.020.021.022.027) {choose_1}
    set widget(rev,.top18.fra28.fra30.03.020.021.022.fra18) {devThresh_1}
    set widget(rev,.top18.fra28.fra30.03.020.021.028.033) {choose_2}
    set widget(rev,.top18.fra28.fra30.03.020.021.028.fra19) {devThresh_2}
    set widget(rev,.top18.fra28.fra30.03.020.021.034.039) {choose_3}
    set widget(rev,.top18.fra28.fra30.03.020.021.034.fra20) {devThresh_3}
    set widget(rev,.top18.fra28.fra30.03.020.040.041.046) {choose_4}
    set widget(rev,.top18.fra28.fra30.03.020.040.041.fra21) {devThresh_4}
    set widget(rev,.top18.fra28.fra30.03.020.040.047.052) {choose_5}
    set widget(rev,.top18.fra28.fra30.03.020.040.047.fra22) {devThresh_5}
    set widget(rev,.top18.fra28.fra30.03.020.040.053.058) {choose_6}
    set widget(rev,.top18.fra28.fra30.03.020.040.053.fra23) {devThresh_6}
    set widget(rev,.top18.fra28.fra30.03.08.012) {start_frame}
    set widget(rev,.top18.fra28.fra31.02) {auto_net_frame}
    set widget(rev,.top18.fra28.fra31.02.019.021) {nodial_frame}
    set widget(rev,.top18.fra66) {setup_helpers}
    set widget(rev,.top18.fra68.but18) {setup_help_button}
    set widget(rev,.top19) {userstats}
    set widget(rev,.top19.fra21.fra23.fra22.but26) {browse_userurl}
    set widget(rev,.top19.fra21.fra23.fra24.but25) {browse_groupurl}
    set widget(rev,.top19.fra22.fra26.cpd29.01) {users_listbox}
    set widget(rev,.top20) {devices}
    set widget(rev,.top20.fra22.cpd25.01) {device_list}
    set widget(rev,.top21) {version}
    set widget(rev,.top21.fra24.but29) {browse_tksetiDownload}
    set widget(rev,.top22) {Skymap}
    set widget(rev,.top22.fra24.cpd20.03) {SkymapCanvas}
    set widget(rev,.top22.fra24.lab28) {SkymapLabel}
    set widget(rev,.top22.fra25.but17) {SkymapSpikeButton}
    set widget(rev,.top22.fra25.but19) {SkymapGaussianButton}
    set widget(rev,.top22.fra25.but25) {SkymapLocsButton}
    set widget(rev,.top22.fra25.but26) {SkymapPulseButton}
    set widget(rev,.top22.fra25.but27) {SkymapTripletButton}
    set widget(rev,.top22.fra25.but30) {SkymapButton}
    set widget(rev,.top23) {spike}
    set widget(rev,.top29) {pulse}
    set widget(rev,.top30) {famous}
    set widget(rev,.top30.fra32.fra34) {users}
    set widget(rev,.top30.fra32.fra34.but41) {browse_users}
    set widget(rev,.top30.fra32.fra42) {spikes}
    set widget(rev,.top30.fra32.fra42.02) {browse_spikes}
    set widget(rev,.top30.fra32.fra43) {gaussians}
    set widget(rev,.top30.fra32.fra43.02) {browse_gaussians}
    set widget(rev,.top31) {gaussian}
    set widget(rev,.top33) {triplet}
    set widget(run) {.top17.fra18.fra33.04}
    set widget(scale) {.top17.fra18.fra18.fra19.016}
    set widget(server_str) {.top17.fra18.fra17.01.03}
    set widget(setup) {.top18}
    set widget(setup_automodes) {.top18.fra28}
    set widget(setup_general) {.top18.fra22}
    set widget(setup_help_button) {.top18.fra68.but18}
    set widget(setup_help_frame) {.top18.fra26}
    set widget(setup_help_text) {.top18.fra26.cpd27.03}
    set widget(setup_helpers) {.top18.fra66}
    set widget(setup_note_tabs) {.top18.fra23}
    set widget(setup_tab_automodes) {.top18.fra23.rad27}
    set widget(setup_tab_general) {.top18.fra23.rad25}
    set widget(setup_tab_helpers) {.top18.fra23.rad26}
    set widget(spike) {.top23}
    set widget(spikes) {.top30.fra32.fra42}
    set widget(start_frame) {.top18.fra28.fra30.03.08.012}
    set widget(status_str) {.top17.fra18.fra22.fra23.02}
    set widget(tkseti) {.top17}
    set widget(triplet) {.top33}
    set widget(users) {.top30.fra32.fra34}
    set widget(users_listbox) {.top19.fra22.fra26.cpd29.01}
    set widget(userstats) {.top19}
    set widget(version) {.top21}

#################################
# USER DEFINED PROCEDURES
#
proc init {argc argv} {
global seti widget

    set seti(tksetiVersion) "3.06"
    
set seti(helptext) {
    
    ========================
    TkSETI@Home Installation
    ========================

    Untar the distribution file:

    gunzip -qc tkseti-X.XX.tar.gz | tar xvf -
    
    and just place the tkseti file anywhere in your path.

    There is a "contrib" directory where various scripts and
    information has been contributed by TkSETI users.
    
    TkSETI requires Tcl/Tk 8.0 or newer.
    See http://www.scriptics.com/download
    
    ===================
    TkSETI@Home Startup
    ===================

    You must run the setiathome client once manually from the command line
    to get registered. Just answer all the prompts. Once the client is
    running properly, you can run tkseti.

    TkSETI can be started if the client is already running, or it can start
    the client manually or automatically for you. This is explained in the
    Setup section that follows.

    TkSETI will look for the client files in the directory
    /var/db/setiathome . If you've run the client elsewhere, or run more
    than one client, just specify the setiathome client directory on the
    tkseti command line. For example:

    tkseti ~/setiathome

    If your xserver is short on colors, you might try giving TkSETI its own
    colormap:

    tkseti ~/setiathome -colormap new
    
    Multiple Clients
    ================

    If you run multiple setiathome clients, you must run an instance of
    tkseti for each one. TkSETI needs to find just one client, and the way
    to do this is to give the clients unique names or execute them from
    unique paths. Specify this unique string in the "Client Name" setup
    field described next. Examples:

    client1
    cpu0/setiathome

    Here's one way to run more than one setiathome client:
    
    - create another setiathome directory: mkdir ~/setiathome2.
    - cd into the new directory: cd ~/setiathome2
    - make a copy of the client anywhere in your path with a unique name.
      - or -
      make a symlink with a unique name to your client (in this working
      directory or anywhere in your path):
             ln -s /usr/local/bin/setiathome seti2
    - execute the client manually, and select option 2:
    
    We use your email address to identify you.
    Please type:
    1 to set up a new account (first-time users);
    2 to log into an existing account (returning users).
    Your choice (1 or 2): 2
    Email address: you@your.address

    The client will verify your email address and then download another
    work unit and start processing it.

    Execute tkseti with the new directory as an argument:
       tkseti ~/setiathome2
    With the defaults, it may find the wrong client to monitor. Go to the
    Setup window and fill in the proper "Client Name" and "How to Run"
    values.
    
    =================
    TkSETI@Home Setup 
    =================

    The TkSETI Setup window has sections divided up with notebook tabs:
    General Setup, Helper Applications, and Auto Modes.
    
    =====================
    *** General Setup ***
    =====================
    
    The first section of the Setup window offers various options for
    starting or continuing the client when TkSETI starts, and killing or
    pausing the client when TkSETI exits. There is also an option to restart
    the client if it "disappears" after it has been running. This can occur
    if somebody kills it externally, or if it unexpectedly dies on its own.

    The "Master Directory" is where files are kept containing your
    personal best Spike, Gaussian, Pulse and Triplet and the
    coordinates of all the work units that you process so TkSETI can
    plot them all on the Star Map. If you run multiple TkSETIs, point
    them all to the same Master Directory. The Master Directory can be
    the same as one of your setiathome client directories. If you ever
    change the Master Directory, TkSETI will carry over these values
    and merge them with any master files found in the new Master
    Directory.
    
    ===========================
    *** Helper Applications ***
    ===========================
    
    Client Name
    ===========

    The client name is used to find the setiathome client in the output of
    the "How to Stat" command described below. It is usually "setiathome",
    but you may need to enter all or part of the path here, especially if
    you run more than one client at a time. Or, perhaps you've renamed the
    client itself. Note that this is the client executable name, _not_ a
    script that you might use to start the client.

    How to Run (setiathome client)
    ==========
    
    Typical examples:
    
    setiathome
    /usr/local/seti/cpu0/setiathome -nice 19
    /usr/local/bin/setiathome -nice 19
    setiathome -email -nice 19 >& /dev/null

    Higher "nice" values (19 is the highest) give it a low run priority so
    you don't notice the cpu activity so much while you're interacting with
    other programs.
    
    With the "-email" option, the client will send network error messages to
    you via email.
    
    Use ">& /dev/null" to discard the output from the client. Piping the
    output through grep should work, but due to internal buffering you might
    not get anything output for a long time.

    There are two setiathome client command line options that may be of use
    to some people:
    
        -stop_after_process     stop after current WU - do NOT send result
        -stop_after_xfer        stop after current WU - DO send result
    
    How to Kill, Pause, Continue
    ============================

    The Kill, Pause and Continue commands must contain the string "$pid",
    which gets replaced with the process ID of the setiathome client.
    
    Kill:     kill -KILL $pid
    Pause:    kill -STOP $pid
    Continue: kill -CONT $pid
    
    How to Stat
    ===========
    
    Stat:     ps ax
    
    The Stat command is expected to return zero or more lines from
    ps. TkSETI searches these lines for the "setiathome" client program.
    The ps output must contain the "pid", the "status" and at least the
    command name from the command line. The status flag meaning that a
    process is paused is "T", but this can be configured in the Setup window
    ("Paused Flags") with a list of blank-separated values. All other flags
    are considered as running. Zombies (Z or z) are ignored.  For example:
    
    % ps ax
    ... other processes not shown ...
    5809  p0 R N444:18 setiathome -email -nice 19 
    ... other processes not shown ...
    
    The stat string is split into fields by blanks, and the field numbers
    (starting from zero) are configurable for the PID and Status. In the
    example above, the PID index is 0 (5809) and the Status index is 2
    ("R").

    Web Browser
    ===========
    
    This command must contain the string "$url" which gets replaced by
    the SETI@Home web page URL, or a statistics page URL.

    Some systems, such as Debian GNU/Linux, supply "netscape" as a
    wrapper that first tries to open a new window in an
    already-running netscape. If that fails because netscape isn't
    running, it launches a new netscape. If your system doesn't have
    such a wrapper, use the command form shown below for "no wrapper"
    to achieve the same results. The command shown also works with the
    Debian wrapper.
    
    Examples:

    netscape (smart wrapper): netscape $url
    netscape (no wrapper): /bin/csh -c "netscape -remote openURL\\\\($url,new-window\\\\) || exec netscape $url"
    KDE's kfm:  kfmclient openURL $url
    lynx:       xterm -e lynx $url
    
    Proxy Host
    ==========

    If you need to access the web through a proxy server, TkSETI can be
    configured to use the proxy for its own accesses to the web and for
    running the setiathome client.

    At startup, TkSETI checks if you have previously set the HTTP_PROXY
    environment variable, and uses this to set or override any previous
    value stored by TkSETI in the Setup.  Or, in the
    Setup/HelperApplications menu, give the proxy host (eg:
    my.proxy.host) and proxy port number (eg: 8080). In either case, you
    can click "Text Proxy" to actually test the proxy server while
    on-line. Please note that the environment variable, if set, will
    always override any proxy stored in TkSETI's Setup every time TkSETI
    is started.

    TkSETI can't add the proxy to the setiathome command line for you
    because for some people "How to Run" is actually a script, and these
    scripts would not expect this extra parameter. However, TkSETI sets
    the environment variable HTTP_PROXY (in the format "hostname:port")
    as documented in the README file that comes with the setiathome
    client.
    
    ==================
    *** Auto Modes ***
    ==================
    
    The setiathome client can already be running before tkseti is started,
    or tkseti can start it for you. While it's running, tkseti checks the
    client status and progress every 10 seconds and updates the CPU usage,
    progress bar and stats.
    
    You can select manual or automatic starting and stopping of the
    setiathome client from within tkseti. Dial-up users may supply network
    start/stop scripts for TkSETI to run when the client needs to contact
    the server.

    Note that it's up to you to make sure that the interaction between
    these auto modes and any use of these setiathome client command
    line options doesn't conflict:
    
        -stop_after_process     stop after current WU - do NOT send result
        -stop_after_xfer        stop after current WU - DO send result
    
    o   "Do Not Run during..." mode
    
        This automatic mode is controlled simply by specifying a time window
        and days of the week _NOT_ to allow the client to run. In this mode,
        TkSETI will always stop the client during this time. Outside of this
        time window, the other automatic mode ("Monitor System Devices...")
        is also functional.

    o   "Monitor System Devices..." mode
    
        This automatic mode is currently only available for Linux. If you
        know how to do this for your platform, please let me know
        (rickm@vsl.com).

        Automatic starting and stopping is controlled by watching for
        various system activity, typically of the keyboard and mouse. Select
        up to 6 devices to monitor. Choose the correct serial device if you
        have a serial mouse.

        For auto start, set "After" to the number of seconds of idleness to
        wait before (re)starting the client. For auto-stop, set "Auto Mode
        Uses" to instruct tkseti to stop by pausing or killing.

        A threshold may be specified for each device. The device is
        considered "idle" if the number of interrupts during the main
        10 second loop is less than or equal to this threshold.  Note that
        one keystroke is two interrupts. For other devices such as the
        mouse and network interfaces, you'll have to experiment to set
        a threshold value that works for you.
    
        The setiathome client keeps progress checkpoints, so killing it does
        not loose any work. I recommend pausing over killing anyway, unless
        you can't afford to have the memory tied up by the inactive
        setiathome process.

    o   "Run Network Start / Stop scripts"

        This mode is intended for dial-up users. I actually recommend using
        the "diald" daemon instead, but this TkSETI feature may be of some
        use for some people.

        I'm actually unable to test this properly, so please let me know how
        it works for you.
    
        When the client finishes a work unit and needs to contact the
        SETI@Home server, the script "How to Start Net" will be run after
        waiting for the specified number of seconds (the first "after"
        entry). When a new work unit is received, the script "How to Stop
        Net" will be run after waiting for the specified number of seconds
        (the second "after" entry).

        Note that the Start script will not be run during the optional
        "Do Not Dial" period.
    
        Note the the Stop script will _only_ be run if TkSETI ran the Start
        script. Hopefully this makes sense. For example, if your network is
        already up when you start TkSETI, you don't want it to the take the
        network down after the time specified for the Stop script!
    
        TkSETI will kill the client before running the Start script, and
        restart the client after. This is because the client waits for one
        hour between attempts to contact the server. TkSETI makes no attempt
        to determine if the Start script succeeded. If the client still
        requires a work unit after the "after" seconds has elapsed again, it
        goes through the sequence again: kill client; run Start script; run
        client.

        The "Test" buttons on the Setup screen run your scripts immediately.
        The client is not killed in this case.
    
    *** Please note that the "after" time for the Start script must be long
        enough to contact the server and download a new work unit. Don't be
        too impatient! We'll be running this thing for two years.

    *** Currently there is no check to guard against repeated failed attempts
        to start the network and retrieve an new work unit. Please let me
        know if this is a problem.

    *** Also note that your Start script should be able to handle being
        executed when the network is already up. Likewise, the Stop script
        should be able to handle being executed when the network is already
        down. In both cases, just return and do nothing. 

    *** Don't put "&" in your Start and Stop scripts to run them in the
        background. If you do, you need to make the "after" time longer to
        include the time required start your dialup connection. Also, you
        must have a space before the ampersand:  start_net &
        It still may not work; please let me know if you try this.

    ====================
    Window Manager Icons
    ====================

    Check the "contrib" directory for bitmap (xbm) and pixmap (xpm)
    files to use as TkSETI icons.
    
    fvwm
    ====

    Put your pixmap or bitmap file into a directory in the PixmapPath
    or IconPath path where you know fvwm is already looking, or use a
    full pathname in the Style statement below. Then just add one of
    the following to your .fvwm2rc or .fvwmrc file:

        fvwm version 2.x:    Style "Tk-SETI*" Icon seti.xpm
        fvwm version 1.x:    Icon  "Tk-SETI*" seti.xpm

    Then restart fvwm and you've got it.
    
    =======
    Support
    =======

    Contact Rick Macdonald <rickm@vsl.com> with any problems or enhancement
    ideas.

    TkSETI optionally checks after every work unit for updates and
    notifies you when a new version is available. A window is popped
    up and also a message is placed in the TkSETI window manager title
    bar.
    
    The latest version is available from
        http://www.cuug.ab.ca/~macdonal/tkseti

    =======
    Licence
    =======

    TkSETI - interactive automated control of the setiathome UNIX client
    program.

    Copyright (C) 1999-2000 by Rick Macdonald <rickm@vsl.com>.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
}

    if {[catch {info nameofexecutable} nameofexecutable]} {
        set nameofexecutable wish
    }
    set seti(usage) "    TkSETI version $seti(tksetiVersion) by Rick Macdonald <rickm@vsl.com>\n\nYou are running $nameofexecutable patchlevel [info patchlevel].\n\nUsage: tkseti \[--help\] \[user_setiathome_directory\]\n       user_setiathome_directory defaults to /var/db/setiathome"

    if {[lsearch $argv "--help"] >= 0} {
        puts \n$seti(usage)
        puts $seti(helptext)
        puts \n$seti(usage)
        exit 1
    }
    
    . config -bg grey85
    option add *foreground          black  user
    option add *background          grey85 user
    option add *highlightBackground grey85 user

    if {$argc == 0} {
        set seti(setidir) /var/db/setiathome
    } {
        set seti(setidir) [lindex $argv 0]
        if {[string index $seti(setidir) 0] != "/"} {
            set seti(setidir) [file join [pwd] $seti(setidir)]
        }
    }
    
    # NOTE: vTcl would otherwise write this proc to be global
    set seti(client_version) ""
    if {![info exists ::vTcl]} {
        proc {seti_errorExit} {msg} {
            global seti
            set msg "$msg\n\n[string trimleft $seti(usage)]"
            puts "\n$msg\n"
            wm withdraw .
            bell
            tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
            exit 1
        }

        proc {seti_getClientVersion} {} {
            global seti
            set vers [seti_getFileText $seti(versionfile)]
            if {$vers == ""} {
                set seti(client_version) ""
            } {
                regexp {major_version=([0-9]+).*minor_version=([0-9]+)} $vers match major minor
                set seti(client_version) $major.$minor
            }
        }
        
        proc {seti_getFileText} {file} {
            if {[catch {open $file r} fin]} {
                return ""
            }
            set    text [read $fin]
            close  $fin
            return [string trimright $text "\n"]
        }

        if {[info tclversion] < 8} {
            set  msg "Sorry, Tcl/Tk version 8.0 or newer required.\n\nYou are running $nameofexecutable patchlevel [info patchlevel]."
            seti_errorExit $msg
            exit 1
        }
        
        if {![file isdirectory $seti(setidir)]} {
            set  msg  "*** ERROR *** seti directory '$seti(setidir)' not found"
            seti_errorExit $msg
            exit 1
        }

        set seti(file_ext)        sah
        set seti(versionfile)     $seti(setidir)/version.$seti(file_ext)
        seti_getClientVersion
        if {$seti(client_version) == ""} {
            set seti(file_ext)    txt
            set seti(versionfile) $seti(setidir)/version.$seti(file_ext)
            seti_getClientVersion
        }
        
        set seti(statefile)   $seti(setidir)/state.$seti(file_ext)
        set seti(workfile)    $seti(setidir)/work_unit.$seti(file_ext)
        set seti(userfile)    $seti(setidir)/user_info.$seti(file_ext)
        set seti(versionfile) $seti(setidir)/version.$seti(file_ext)
        set seti(pidfile)     $seti(setidir)/pid.$seti(file_ext)

        if {![file exists $seti(userfile)]} {
            set  msg "*** ERROR - you must run the setiathome client manually the first time (to register).\n\n*** Or, perhaps '$seti(setidir)' isn't the setiathome client directory? If not, specify the correct directory on the tkseti command line."
            seti_errorExit $msg
            exit 1
        }

        set minVersion 3
        if {$seti(client_version) == "" || $seti(client_version) < $minVersion} {
            set  msg "*** ERROR - setiathome client version '$seti(client_version)' not supported by TkSETI $seti(tksetiVersion).\n\nPlease upgrade to setiathome client version $minVersion or newer."
            seti_errorExit $msg
            exit 1
        }
    }

    set seti(haveHttp) 1
    if {[catch {package require http} rep]} {
        set seti(haveHttp) 0
    }

    # These have to be in init, not main, for things to work properly.
    set seti(_DialogFont)  fixed
    set seti(_HeadingFont) {Helvetica -16 bold}
    
    foreach  name [array names seti _*Font] {
        set  name [string trim $name _]
        lappend   seti(fonts)  $name
        set   f   [string tolower $name]
        set   seti($name)  $seti(_$name)
        set   seti($f)     $f
        catch {font delete $f}
        eval  font create  $f [font actual $seti(_$name)]
    }

set gif { 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
}
    image create photo seti -data $gif

    # This is OK, but means having to tar up the gif file with tkseti.tcl.
    #set titlefile [file dirname [info script]]/tkseti.gif
    #image create photo seti -file $titlefile

    # This is cooler, but if it fails we're dead.
    #set titlefile $seti(setidir)/title.gif
    #if {![file exists $titlefile]} {
    #    if {![catch {::http::geturl  http://setiathome.ssl.berkeley.edu/title.gif} tok]} {
    #        set    fd [open $titlefile "w"]
    #        seti_verboseMsg $fd [::http::data $tok]
    #        close $fd
    #    }
    #}
    #if {[file exists $titlefile]} {
    #    image create photo seti -file $titlefile
    #}

image create bitmap tkseti_icon1 -data {
#define tkseti_icon1_width 64
#define tkseti_icon1_height 64
static char tkseti_icon1_bits[] = {
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xaf,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0x56,0x55,0xfd,
 0xff,0xff,0xff,0xff,0xff,0x55,0x55,0xf5,0xff,0xff,0xff,0xff,0x7f,0xaa,0xaa,
 0xaa,0xff,0xff,0xff,0xff,0xf7,0xfa,0xd5,0xaa,0xfe,0xff,0xff,0xff,0x7f,0xfd,
 0xab,0xaa,0xfe,0xff,0xff,0xff,0x5f,0x6f,0xaf,0xaa,0xfa,0xff,0xff,0xff,0xfd,
 0xff,0xfb,0x55,0xf5,0xff,0xff,0xbf,0xaf,0x55,0xaf,0xaa,0xd6,0xff,0xff,0xff,
 0x57,0xff,0xbb,0x55,0xd5,0xff,0xff,0xef,0x5d,0x55,0xdd,0x55,0x55,0xff,0xff,
 0xbf,0xaf,0xff,0xef,0x56,0x55,0xff,0xff,0xff,0x55,0x49,0x55,0xab,0xaa,0xfe,
 0xff,0xfb,0x57,0x5f,0xfd,0x54,0xaf,0xfe,0xff,0xbf,0x56,0x55,0x55,0xab,0x5a,
 0xfd,0x7f,0xf7,0xab,0x6a,0x55,0x5d,0xb5,0xfe,0xff,0xbf,0x55,0xad,0x6d,0x65,
 0x55,0xfb,0xff,0xef,0xad,0xaa,0xaa,0xaa,0xaa,0xff,0xbf,0x7d,0xb5,0x55,0x55,
 0x57,0xad,0xf4,0xff,0xaf,0xaa,0xaa,0x6a,0x55,0xab,0xfa,0xff,0x7f,0x55,0x55,
 0x95,0xaa,0x5e,0xf5,0xbf,0x95,0xaa,0x2a,0xd5,0xaa,0xbb,0xfa,0xf7,0xbf,0x6a,
 0x55,0x55,0xea,0xee,0xf5,0xff,0x6e,0xb5,0xaa,0x92,0x55,0xa3,0xdb,0xff,0xb7,
 0xca,0x55,0x54,0xda,0x5a,0xff,0x6f,0x5f,0x55,0x4a,0xa5,0x55,0x55,0xd5,0xff,
 0xad,0xad,0xa5,0x52,0xaa,0xaa,0xea,0xff,0x5f,0x55,0x2a,0x4a,0x55,0x55,0xd5,
 0xdf,0xb6,0x56,0x49,0x29,0x55,0xab,0xea,0xff,0x7f,0x55,0xa5,0xa4,0x5a,0xad,
 0xea,0x7b,0xab,0x56,0x55,0xaa,0xaa,0x52,0xd5,0xff,0xff,0x5a,0x12,0x95,0xaa,
 0x5a,0xf5,0xdf,0x55,0x55,0xa9,0x62,0xaa,0xaa,0xea,0xff,0xff,0xaa,0x4a,0x54,
 0x55,0x55,0xf5,0xff,0x56,0x57,0x55,0x25,0xb5,0xaa,0xea,0xdf,0xff,0x55,0x25,
 0x55,0x55,0x57,0xeb,0xff,0xad,0x5a,0x95,0x52,0xd5,0xae,0xaa,0xff,0xf7,0x57,
 0x55,0x55,0xb5,0xbb,0xda,0x6f,0x5f,0x55,0x55,0xaa,0xda,0xae,0xea,0xff,0xfd,
 0xbb,0xaa,0x55,0xed,0x5b,0xd5,0xff,0x57,0xad,0xaa,0xd4,0xb6,0xbe,0xea,0xff,
 0xff,0x57,0x55,0x55,0xdb,0x5f,0xf5,0xdf,0x7f,0x5d,0xad,0x55,0xed,0xba,0xea,
 0x7f,0xdb,0x57,0x55,0xf6,0xb6,0xbf,0xfa,0xff,0xff,0xbd,0xaa,0x59,0xfb,0x6e,
 0xf5,0xff,0x7f,0xaf,0xaa,0xd6,0xdd,0xbf,0xfd,0xff,0xed,0xf7,0x5a,0x79,0xef,
 0xbd,0xfa,0xff,0xff,0xdd,0xaa,0xd6,0x7b,0xbf,0xfe,0xff,0x7f,0x7f,0xab,0x7d,
 0xdd,0xff,0xfe,0xff,0xef,0xf7,0x55,0xd7,0xf7,0x7b,0xff,0xff,0xff,0xbf,0x6a,
 0xff,0x7f,0xff,0xff,0xff,0xff,0xfd,0x95,0xdb,0xfe,0xff,0xff,0xff,0xbf,0xef,
 0x75,0xff,0xf7,0xfd,0xff,0xff,0xff,0xff,0xea,0x7d,0xdf,0xff,0xff,0xff,0xff,
 0xfe,0xfa,0xef,0xff,0xff,0xff,0xff,0xff,0xef,0xfa,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xdd,0x7e,0xbb,0xff,0xff,0xff,0xff,0xff,0xfa,0xf7,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xdf,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff};
}
}

init $argc $argv


proc {TkFontGetSizes} {{quick {}}} {
global TkFont
    $TkFont(slb) delete 0 end
    if {[info exists TkFont($TkFont(-family),sizes)]} {
        foreach s $TkFont($TkFont(-family),sizes) {
            $TkFont(slb) insert end $s
        }
    } {
	if {$quick != {}} {
            return
        }
        TkFontShowStop
        for {set s 2} {$s < 25} {incr s} {
	    set TkFont(progress_txt) "Scanning $s of 25 sizes..."
	    update
            if {$TkFont(stopflag)} {
                break
            }
            if {[font actual [list $TkFont(-family) $s] -size] == "$s"} {
                $TkFont(slb) insert end $s
                lappend TkFont($TkFont(-family),sizes) $s
            }
        }
        TkFontHideStop
    }
    TkFontListboxSelect slb $TkFont(-size)
}

proc {TkFontHideStop} {} {
global TkFont
    set  TkFont(progress_txt) ""
    pack forget $TkFont(stop) $TkFont(progress)
    $TkFont(top) config -cursor ""
}

proc {TkFontInit} {farray} {
global TkFont
    upvar #0 $farray uarray
    catch {font delete tkfont}
    font create tkfont -family $uarray($TkFont(select))
}

proc {TkFontListboxSelect} {lb element} {
global TkFont
    $TkFont($lb) selection clear 0 end
    set l [$TkFont($lb) get 0 end]
    if {[set n [lsearch $l $element]] >= 0} {
        $TkFont($lb) selection set $n
        $TkFont($lb) see $n
    }
}

proc {TkFontLoad} {{quick {}}} {
global TkFont
    if {$TkFont(type) != "all" && $quick == {} && ![info exists TkFont(fixed)]} {
        TkFontShowStop
	set TkFont(fixed)        {}
	set TkFont(proportional) {}
	set num [llength $TkFont(all)]
	set n   1
	foreach f $TkFont(all) {
	    set TkFont(progress_txt) "Scanning $n of $num fonts..."
	    incr n
	    update
            if {$TkFont(stopflag)} {
                unset TkFont(fixed)
                unset TkFont(proportional)
                break
            }
	    if {[font metrics [list $f] -fixed]} {
		lappend TkFont(fixed) $f
	    } else {
		lappend TkFont(proportional) $f
	    }
	}
        TkFontHideStop
    }
    if {![info exists TkFont(fixed)]} {
        set TkFont(type)  all
    }
    catch {set TkFont(prev) [$TkFont(flb) get [$TkFont(flb) curselection]]}
    $TkFont(flb) delete 0 end
    foreach f $TkFont($TkFont(type)) {
        $TkFont(flb) insert end $f
    }
    if {[info exists TkFont(prev)]} {
	TkFontListboxSelect flb $TkFont(prev)
    }
}

proc {TkFontScrolledListbox} {f title args} {
frame $f -relief groove -borderwidth 2
    listbox $f.list  -xscrollcommand [list $f.xscroll set]  -yscrollcommand [list $f.yscroll set]
    eval {$f.list configure} $args
    scrollbar $f.xscroll -orient horizontal -command [list $f.list xview]
    scrollbar $f.yscroll -orient vertical   -command [list $f.list yview]
    if {$title != {}} {
        label $f.label -text $title -anchor nw
        grid  $f.label -sticky nw
    }
    grid $f.list $f.yscroll -sticky news
    grid $f.xscroll -sticky news
    grid rowconfigure    $f 1 -weight 1
    grid columnconfigure $f 0 -weight 1
    return $f.list
}

proc {TkFontSet} {} {
global TkFont
    
    # Save the actual font parameters after any font substitutions.
    # "TkFont(name)" is the font configuration information
    # with a line break before "-slant" so it looks nicer.
    # The code is ordered to only execute "font actual" once.
    
    set fn [font actual tkfont]
    array set TkFont $fn
    append fn \n[lrange [font metrics tkfont] 0 5]
    
    regsub -- "-slant" $fn "\n-slant" TkFont(name)
}

proc {TkFontSetFamily} {} {
global TkFont
    set f [list $TkFont(-family) $TkFont(-size) $TkFont(-weight) $TkFont(-slant)]
    foreach opt {underline overstrike} {
        if {$TkFont(-$opt)} {
            lappend f $opt
        }
    }
    return $f
}

proc {TkFontSetSelect} {} {
global TkFont
    array set TkFont [font actual $TkFont(select)]
    TkFontUpdate
    set TkFont(type) all
    TkFontLoad quick
    TkFontListboxSelect flb $TkFont(-family)
    TkFontListboxSelect slb $TkFont(-size)
}

proc {TkFontShowStop} {} {
global TkFont
    set   TkFont(stopflag) 0
    pack $TkFont(stop) $TkFont(progress) -side left -padx 6
    $TkFont(top) config -cursor watch
}

proc {TkFontUpdate} {} {
global TkFont
    
    # The elements of font that have a leading - are
    # used directly in the font configuration command.
    
    eval {font configure tkfont} [array get TkFont -*]
    TkFontSet
}

proc {TkFont_Select} {args} {
global TkFont
    # Arguments:
    #   -w          fontsel toplevel window
    #   -fonts      list of fonts to select and return
    #   -font       font to use for fontsel itself
    #   -farray     array to use to store fonts
    #   -rotextbg   read only text background
    #   -edittextbg edit text background
    #   -savefile   file to save font names in
    #   -select     font within fonts list to select

    if {[info tclversion] < 8.0} {
        bell
        tk_dialog .fontError "TkFont Select Error"  "TkFont Select requires Tcl/Tk version 8.0 or newer." "error" 0 "OK"
        return {}
    }

    set w          .tkfont
    set fonts      DialogFont
    set font       fixed
    set farray     userfont
    set rotextbg   green
    set edittextbg white
    set savefile   ""
    set select     ""
    
    foreach option {w fonts font farray rotextbg edittextbg savefile select} {
	set index [lsearch -exact $args "-$option"]
	if {$index != -1} {
	    incr index
	    set value [lindex $args $index]
	    set $option $value
	}
    }
    set      TkFont(top) $w
    toplevel $w -class TkFont
    upvar    #0 $farray uarray

    if {$select == "" || [lsearch -exact $fonts $select] < 0} {
        set TkFont(select) [string tolower [lindex $fonts 0]]
    } {
        set TkFont(select) [string tolower $select]
    }

    if {$font != ""} {
        option add *TkFont*font $font 100
    }

    set   f [frame $w.mframe -borderwidth 1 -relief raised]
    pack $f -side top -fill x

    menubutton $f.file -text "File" -menu $f.file.m -underline 0
    menu       $f.file.m
    $f.file.m add command -label "Apply"  -command {set TkFont(ok) 2}
    $f.file.m add command -label "Reset"  -command {set TkFont(ok) 4}
    if {$savefile != ""} {
        $f.file.m add command -label "Save" -command {set TkFont(ok) 3}
    }
    $f.file.m add separator
    $f.file.m add command -label "Close"  -command {set TkFont(ok) 1}
    
    menubutton $f.edit -text "Edit" -menu $f.edit.m -underline 0 -state disabled
    menu       $f.edit.m
    
    pack $f.file $f.edit -side left
    
    menubutton $f.help -text "Help" -menu $f.help.m -underline 0 -state disabled
    menu       $f.help.m
    pack       $f.help -side right

    set     f [frame $w.buttons -relief raised -borderwidth 1]
    button $f.close  -text Close  -bd 1 -command {set TkFont(ok) 1}
    button $f.apply  -text Apply  -bd 1 -command {set TkFont(ok) 2}
    button $f.reset  -text Reset  -bd 1 -command {set TkFont(ok) 4}
    button $f.save   -text Save   -bd 1 -command {set TkFont(ok) 3}
    pack   $f.close $f.apply $f.reset -padx 0 -pady 0 -side left -anchor w
    if {$savefile != ""} {
        button $f.save -text Save -bd 1 -command {set TkFont(ok) 3}
        pack   $f.save -padx 0 -pady 0 -side left -anchor w
    }
    pack   $f -side top -pady 0 -anchor nw -fill x

    TkFontInit $farray

    # Font Selection, Type, Format and Size

    set    sf [frame $w.sf -relief groove -borderwidth 2]
    pack  $sf -side top -anchor nw -fill x -pady 12 -padx 12
    label $sf.label -text "Apply To:" -width 10 -anchor e
    pack  $sf.label -side left
    foreach B $fonts {
        set b [string tolower $B]
	radiobutton $sf.$b -text $B -command TkFontSetSelect -value $b -variable TkFont(select)
	pack $sf.$b -side left -padx 6 -pady 2
        set TkFont($b) $B
        set TkFont(orig$b) [font actual $b]
    }

    set    tf [frame $w.tf]
    pack  $tf -side top -anchor nw -pady 4
    label $tf.label -text "Font Type:" -width 12 -anchor e
    pack  $tf.label -side left
    foreach b {all fixed proportional} {
	radiobutton $tf.$b -text $b -command TkFontLoad -value $b -variable TkFont(type)
	pack $tf.$b -side left -padx 6
    }

    set    ff [frame $w.ff]
    pack  $ff -side top -anchor nw -pady 0
    label $ff.label -text "Font Format:" -width 12 -anchor e
    pack  $ff.label -side left
    checkbutton $ff.bold    -text Bold       -variable TkFont(-weight)  -onvalue bold   -offvalue normal -command  TkFontUpdate
    checkbutton $ff.italic  -text Italic     -variable TkFont(-slant)   -onvalue italic -offvalue roman  -command  TkFontUpdate
    checkbutton $ff.underline  -text underline  -variable TkFont(-underline)   -command TkFontUpdate
    checkbutton $ff.overstrike -text overstrike -variable TkFont(-overstrike)  -command TkFontUpdate
    pack  $ff.bold $ff.italic $ff.underline $ff.overstrike -side left -padx 6

    # Add an entry to enter a specific size.
    
    set     f [frame $w.size]
    pack   $f       -side top -fill x -anchor nw -pady 4
    label  $f.msg   -text "Size:" -width 12 -anchor e
    entry  $f.entry -textvariable TkFont(-size) -width 4 -background $edittextbg
    bind   $f.entry <Return> {TkFontUpdate ; TkFontGetSizes quick}
    pack   $f.msg   -side left -anchor w
    pack   $f.entry -side left -fill none -anchor w -padx 6 -pady 4
    button $f.stop  -text Stop -bd 1 -command {set TkFont(stopflag) 1}
    label  $f.prog  -text "" -background $rotextbg -textvariable TkFont(progress_txt)
    set    TkFont(stop)     $f.stop
    set    TkFont(progress) $f.prog 

    # Listboxes for the font families and the available sizes for the current font
    
    set lf  [frame $w.lboxes]
    set TkFont(slb) [TkFontScrolledListbox $lf.slb "Sizes:"     -width  4 -height 12 -exportselection 0 -setgrid 1]
    set TkFont(flb) [TkFontScrolledListbox $lf.flb "Families:"  -width 25 -height 12 -exportselection 0 -setgrid 1]
    pack $lf     -side top  -fill both -pady  4 -expand 1 -padx 6
    pack $lf.slb -side left -fill both -padx  6 -expand 0 -anchor w
    pack $lf.flb -side left -fill both -padx  6 -expand 1 -anchor w
    bind $TkFont(slb) <ButtonRelease-1>  {set TkFont(-size)   [$TkFont(slb) get [$TkFont(slb) curselection]] ; TkFontUpdate}
    bind $TkFont(flb) <ButtonRelease-1>  {set TkFont(-family) [$TkFont(flb) get [$TkFont(flb) curselection]] ; TkFontUpdate ; TkFontGetSizes}
    
    # This label displays the current font
    
    label $w.font -textvar TkFont(name) -bd 5

    # A message displays a string in the font.

    message $w.msg -aspect 1000  -borderwidth 10 -font tkfont  -text  "ABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n0123456789\n!@#$%^&*()_+-=[]{};:\"'` ~,.<>/?\\|"

    pack $w.font $w.msg  -side top

    set allfonts [lsort [font families]]
    set TkFont(type)  all
    set TkFont(all)  $allfonts
    TkFontLoad quick
    
    TkFontSetSelect
    
    TkFontGetSizes
        
    set TkFont(ok) 1

    update idletasks
    set    oldgrab [grab current]
    grab   $w
    
    while {$TkFont(ok) != 0} {
        tkwait variable TkFont(ok)
        switch $TkFont(ok) 1 {
            # Close
            set TkFont(ok) 0
        } 2 {
            # Apply
            eval {font configure $uarray($TkFont(select))} [array get TkFont -*]
            set uarray($TkFont($TkFont(select))) [TkFontSetFamily]
        } 3 {
            # Save
            set txt ""
            foreach f $fonts {
                append txt "set ${farray}($f) \{$uarray($f)\}\n"
            }
            if {[catch {open $savefile w} fout]} {
                tk_dialog .fontSave "TkFont Save Error"  "ERROR saving fonts in file $savefile:\n\n$fout" "error" 0 "OK"
                return
            }
            puts   $fout [string trim $txt]
            close  $fout
            tk_dialog .fontSave "TkFonts Saved" "Fonts have been saved in $savefile." "info" 0 "OK"
        } 4 {
            # Reset
            eval font configure $uarray($TkFont(select)) $TkFont(orig$TkFont(select))
            TkFontSetSelect
            TkFontGetSizes
            set uarray($TkFont($TkFont(select))) [TkFontSetFamily]
        }
    }

    grab    release $w
    destroy $w
    grab    $oldgrab
}

proc {seti_HMS2sec} {h m s} {
foreach u {h m s} {
        if {[subst $$u] != "0"} {
            set $u [string trimleft [subst $$u] 0]
        }
    }
    return [expr $h * 3600 + $m * 60 + $s]
}

proc {seti_Lock} {dir {opt lock}} {
set lock [file join $dir tksetiLOCK.[pid]]

    if {$opt == "unlock"} {
        file delete $lock
        return
    }

    exec touch $lock

    set locks [lsort [glob -nocomplain [file join $dir tksetiLOCK.*]]]
    set locker ""

    foreach l $locks {
        set rep ""
        set ll [file tail $l]
        catch {exec kill -0 [lindex [split $ll .] 1]} rep
        if {[string first "o such" $rep] > 0} {
            # stale lock - remove it
            file delete $l
            continue
        }

        if {$locker == "" || [file mtime $l] < [file mtime $locker]} {
            set locker $l
        }
    }

    if {$lock == $locker} {
        return ""
    }

    file delete $lock

    # Return the PID of the process that has the lock.
    return [lindex [split [file tail $locker] .] 1]
}

proc {seti_actions} {action} {
global seti widget

    seti_setStatus force
    set seti(expected_status) other

    if {$action == "run" || $action == "continue"} {
        set seti(we_stopped_client) 0
    } {
        set seti(we_stopped_client) 1
    }
    
    foreach {act stat} {run running kill notrunning pause paused continue running} {
        if {$act == $action && $stat == $seti(status)} {
            if {$action == "run" || $action == "continue"} {
                set seti(expected_status) running
            }
            seti_verboseMsg "Not doing action=$act because status=$stat"
            return
        }
    }
    
    $widget(status_str) config -background yellow
    switch $action {
        run {
            set seti(status_str) " Waiting for process to start"
            update idletasks
            # Someone asked for core removal...
            file delete core
            if {[catch {eval exec $seti(_howto_run) &} rep]} {
                bell
                set msg "Can't execute client:\n$seti(_howto_run):\n\n$rep"
                seti_verboseMsg "*** ERROR - $msg"
                tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
            }
            set seti(pid) ?
            seti_getClientStatus run
        }
        default {
            set kill(msg)   die
            set kill(howto) kill
            set kill(stat)  die
            set pause(msg)    pause
            set pause(howto)  pause
            set pause(stat)   pause
            set continue(msg)   continue
            set continue(howto) cont
            set continue(stat)  continue
            
            set seti(status_str) " Waiting for process to [subst $${action}(msg)]..."
            update idletasks
            set pid $seti(pid)
            catch {eval exec $seti(_howto_[subst $${action}(howto)])} rep
            seti_verboseMsg "kill rep=$rep"
            seti_getClientStatus [subst $${action}(stat)]
        }
    }
    
    seti_setStatus force
}

proc {seti_checkFamous} {opt {parm users}} {
global seti widget

    switch $opt {
        browse {
            seti_launchBrowser $seti(_setihost)/stats/$parm.html
        }
        check {
            seti_setServerStr yellow "Contacting Seti Server: stats for Famous Friends..."
            set seti(checkFamous_users)     ""
            set seti(checkFamous_spikes)    ""
            set seti(checkFamous_gaussians) ""
            set seti(checkFamous_pulses)    ""
            set seti(checkFamous_triplets)  ""
            #foreach p {users spikes gaussians pulses triplets}
            seti_getURL "http://$seti(_setihost)/stats/users.html" "seti_checkFamous processusers"
        }
        processusers {
            set body [seti_getURL "http://$seti(_setihost)/stats/users.html" process $parm]
            foreach email_addr [concat $seti(email_addr) $seti(_users_list)] {
                if {[string first $email_addr $body] >= 0} {
                    append seti(checkFamous_users) "$email_addr "
                }
            }
            seti_getURL "http://$seti(_setihost)/stats/spikes.html" "seti_checkFamous processspikes"
        }
        processspikes {
            set body [seti_getURL "http://$seti(_setihost)/stats/spikes.html" process $parm]
            foreach email_addr [concat $seti(email_addr) $seti(_users_list)] {
                if {[string first $email_addr $body] >= 0} {
                    append seti(checkFamous_spikes) "$email_addr "
                }
            }
            seti_getURL "http://$seti(_setihost)/stats/gaussians.html" "seti_checkFamous processgaussians"
        }
        processgaussians {
            set body [seti_getURL "http://$seti(_setihost)/stats/gaussians.html" process $parm]
            foreach email_addr [concat $seti(email_addr) $seti(_users_list)] {
                if {[string first $email_addr $body] >= 0} {
                    append seti(checkFamous_gaussians) "$email_addr "
                }
            }
            if {"$seti(checkFamous_users)$seti(checkFamous_spikes)$seti(checkFamous_gaussians)" != ""} {
                if {![winfo exists $widget(famous)]} {
                    seti_checkFamous show
                    seti_checkFamous hide
                }
                foreach p {users spikes gaussians pulses triplets} {
                   if {$seti(checkFamous_$p) != ""} {
                        set seti(famous_${p}_str) "Found in the Top $p list: $seti(checkFamous_$p)"
                        pack $widget($p) -side top -fill x -expand 1
                    } {
                        set seti(famous_${p}_str) ""
                        pack forget $widget($p)
                    }
                }
                # Clear the geometry settings so the window resizes
                wm geometry $widget(famous) ""
                update idletasks
                seti_checkFamous show
                bell
            }
        }
        hide {
            Window hide $widget(famous)
        }
        show {
            Window show $widget(famous)
            seti_setBrowseButtons users spikes gaussians pulses triplets
        }
    }
}

proc {seti_checkScores} {opt {wtype {}}} {
global seti widget
    switch $opt {
        check {
#puts "\nSTART of tkseti trace dump: [clock format [clock seconds]]" ; flush stdout
            set save 0
            foreach {code type name} "bs Spike power bg Gaussian score bp Pulse score bt Triplet power" {
#puts "seti(master_${code}_score)=$seti(master_${code}_score)" ; flush stdout
#puts "seti(master_${code}_power)=$seti(master_${code}_power)" ; flush stdout
#puts "seti(my_${code}_score)=$seti(my_${code}_score)" ; flush stdout
#puts "seti(my_${code}_power)=$seti(my_${code}_power)" ; flush stdout
#puts "seti(${code}_score)=$seti(${code}_score)" ; flush stdout
#puts "seti(${code}_power)=$seti(${code}_power)" ; flush stdout
                set seti(curr_${code}_score) " $seti(${code}_score)"
                set seti(curr_${code}_power) " $seti(${code}_power)"
                set save_$code 0
                if {[string tolower $seti(${code}_$name)] != "inf" &&  $seti(master_${code}_$name) < $seti(${code}_$name)} {
                    set seti(old_${code}_score) " $seti(master_${code}_score)"
                    set seti(old_${code}_power) " $seti(master_${code}_power)"
                    set seti(old_${code}_date)  " $seti(master_${code}_date)"
                    set seti(my_${code}_score)    $seti(${code}_score)
                    set seti(my_${code}_power)    $seti(${code}_power)
                    set seti(my_${code}_date)   [clock format [clock seconds] -format "%a %b %d %H:%M:%S %Y"]
                    set seti(my_${code}_loc)   "$seti(start_ra) $seti(end_ra) $seti(start_dec) $seti(end_dec)"
                    set save_$code 1
                }
            }
            if {$save_bs || $save_bg || $save_bp || $save_bt} {
                # This sets master_* to be the global top values.
                seti_saveWUcoordinates
            }
            foreach {code type name} "bs Spike power bg Gaussian score bp Pulse score bt Triplet power" {
                set seti(new_${code}_score)   " $seti(master_${code}_score)"
                set seti(new_${code}_power)   " $seti(master_${code}_power)"
                set seti(new_${code}_date)    " $seti(master_${code}_date)"
                if {[set save_$code] && $seti(my_${code}_$name) == $seti(master_${code}_$name)} {
                    # The master top value is the one that _we_ just found!
                    set msg "Congratulations! A new high $type $name:\n\n$type $name: $seti(${code}_$name)\n$type Date: $seti(my_${code}_date)"
                    seti_verboseMsg "*** NOTICE - $msg"
                    if {[info exists seti(email_addr)]} {
                        set user " - $seti(email_addr)"
                    } {
                        set user ""
                    }
                    if {$seti(_popup_new_highs)} {
                        bell
                        Window show $widget([string tolower $type])
                        wm title $widget([string tolower $type]) "Tk-SETI@Home$user - $seti(_client_name) on [info hostname] - New Big $type!"
                        seti_setColours $widget([string tolower $type])
                    }
                }
            }
            if {$save_bs || $save_bg || $save_bp || $save_bt} {
                # Move the markers on the map.
                seti_skymap reset
            }
        }
        hide {
            Window hide $widget($wtype)
        }
    }
}

proc {seti_checkTkSetiVersion} {opt {parm {}}} {
global seti widget
    switch $opt {
        browse {
            seti_launchBrowser $seti(tksetiURL)
            seti_checkTkSetiVersion hide
        }
        check {
            if {$seti(first_loop_flag) || !$seti(_auto_version_check)} {
                return
            }
            set  time [clock seconds]
            # weekly is 604800; two days is 172800; one day is 86400
            if {[expr $time - $seti(_last_version_check)] < 86400} {
                # We only check every so often, but we may already
                # know that there's a new version available from the last check.
                if {$seti(tksetiVersion) >= $seti(_newtksetiVersion)} {
                    return
                }
                seti_checkTkSetiVersion compare
            } {
                set seti(_last_version_check) $time
                seti_getURL $seti(tksetiURL) "seti_checkTkSetiVersion process"
            }
        }
        process {
            # This leaves the prior value of seti(_newtksetiVersion) if the getURL fails.
            set body [string trim [seti_getURL $seti(tksetiURL) process $parm]]
            regexp {version ([0-9]+.[0-9]+)} $body match seti(_newtksetiVersion)
            seti_savePrefs
            seti_checkTkSetiVersion compare
        }
        compare {
            if {$seti(tksetiVersion) < $seti(_newtksetiVersion)} {
                seti_verboseMsg "TkSETI version check :\nYou have version     : $seti(tksetiVersion)\nNew Version Available: $seti(_newtksetiVersion)"
                set title " - v$seti(_newtksetiVersion) now available!"
                update idletasks
                seti_checkTkSetiVersion show
            } {
                set title ""
            }
            seti_setTitle $title
        }
        hide {
            Window hide $widget(version)
        }
        show {
            Window show $widget(version)
            seti_setColours $widget(version)
            seti_setBrowseButtons tksetiDownload
            bell
        }
    }
}

proc {seti_chooseColour} {opt type} {
global seti widget
    switch $opt {
        show {
            set colour [tk_chooseColor -initialcolor $seti($type) -parent $widget(setup) -title "TkSETI@Home - Choose Colour"]
            if {$colour != ""} {
                set seti($type) $colour
            }
        }
    }
}

proc {seti_chooseDevice} {opt devnum {quiet {}}} {
global seti widget
    switch $opt {
        use {
            set disabledcolour [$widget(auto_button) cget -disabledforeground]
            if {$seti(_usedev_$devnum)} {
                $widget(choose_$devnum)  config -state normal
                seti_toggleDisabled normal   $widget(devThresh_$devnum) $disabledcolour
                if {$seti(_device_$devnum) == "" && $quiet == ""} {
                    seti_chooseDevice choose $devnum
                }
            } {
                $widget(choose_$devnum)  config -state disabled
                seti_toggleDisabled disabled $widget(devThresh_$devnum) $disabledcolour
                set seti(_device_$devnum) ""
            }
        }
        choose {
            set    w $widget(devices)
            set    l $widget(device_list)
            Window show $w
            set seti(select_title) "Select Device $devnum"
            $l  delete  0 end
            set selected [array get seti _device_*]
            set devices  [seti_getInterrupts devices]
            foreach  device $devices {
                if {$device == $seti(_device_$devnum) || [lsearch -exact $selected $device] < 0} {
                    $l insert end $device
                    if {$device == $seti(_device_$devnum)} {
                        $l selection set end
                    }
                }
            }
            update idletasks
            set    oldgrab [grab current]
            grab   $w
            tkwait variable seti(device_done)
            grab   release $w
            Window hide    $w
            grab   $oldgrab
            if {[$l curselection] == ""} {
                set seti(_usedev_$devnum) 0
                seti_chooseDevice use $devnum
            } {
                set seti(_device_$devnum) [$l get [$l curselection]]
            }
        }
    }
}

proc {seti_chooseFont} {font} {
global seti widget
    TkFont_Select -w $widget(setup).tkfont -farray seti -fonts $seti(fonts) -select $font
    foreach name  $seti(fonts) {
        set seti(_$name) $seti($name)
    }
}

proc {seti_doStartupAction} {} {
global seti
    if {$seti(status) == "notrunning"} {
        if {$seti(_startact_notrunning)} {
            seti_actions run
        }
    } elseif {$seti(status) == "paused"} {
        if {$seti(_startact_paused)} {
            seti_actions continue
        }
    }
}

proc {seti_exit} {} {
global seti
    switch $seti(_exit_action) {
        kill -
        pause {
            if {$seti(status) == "running"}  {
                seti_actions $seti(_exit_action)
            }
        }
        ask {
        }
    }
    exit
}

proc {seti_getClientStatus} {mode} {
global seti widget
    if {$seti(client_version) >= 2} {
        if {[catch {file mtime $seti(pidfile)} ptime]} {
            set ptime -1
            set seti(pid) ?
        }
        #puts "old=$seti(prev_pidtime) new=$ptime"
        if {$seti(prev_pidtime)  < $ptime} {
            set seti(pid) [seti_getFileText $seti(pidfile)]
            set seti(prev_pidtime) $ptime
        }
        set pid $seti(pid)
    }
    set stat ""
    catch {eval exec $seti(_howto_stat)} ps
    set nloops 0
    set seti(interrupt_getClientStatus) 0
    $widget(interrupt_getClientStatus) config -state normal
    while {1} {
        incr nloops
        set stat ""
        if {$seti(client_version) >= 2} {
            foreach p [split $ps \n] {
                regsub -all { +} [string trim $p] { } s
                if {[lindex [split $s] $seti(_pid_index)] == $seti(pid)} {
                    lappend stat $s
                    break
                }
            }
        } {
            foreach p [split $ps \n] {
                regsub -all { +} [string trim $p] { } s
                if {[string first $seti(_client_name) $s] >= 0 && [string match *\[Zz\]* [lindex [split $s] $seti(_status_index)]] == 0 &&  [string first "tkseti" $s] < 0 && [string first "grep" $s] < 0 && [string first "http" $s] < 0 && [string first "term" $s] < 0 && [string first "setiview" $s] < 0 && [string first "xseti" $s] < 0 && [string first "setiherder" $s] < 0 && [string first ";" $s] < 0} {
                    lappend stat $s
                }
            }
        }
        if {[llength $stat] > 1} {
            bell
            set msg "There seems to be more than one process containing the string \"$seti(_client_name)\" running.\n\nYou need to change Setup/HelperApplications/ClientName to be more specific, perhaps by including the full path to the client in both HowToRun and ClientName.\n\n[join $stat "\n\n"]"
            seti_verboseMsg "*** ERROR - $msg"
            tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
            $widget(interrupt_getClientStatus) config -state disabled
            return [list "error" "More than one client running!"]
        }
        if {$mode == "status" || ($mode != "run" && $stat == "")} {
            break;
        }
        set stat [lindex $stat 0]
        set seti(status_str) " $mode PID $seti(pid)...($nloops)...stat=$stat"
        if {$stat != ""} {
            #if {[lsearch $seti(_pause_flags) [lindex $stat $seti(_status_index)]] < 0}
            if {![string match *\[$seti(_pause_flags)\]* [lindex $stat $seti(_status_index)]]} {
                if {$mode == "continue" || $mode == "run"} {
                    break;
                }
                if {$mode == "die" && $stat == ""} {
                    break;
                }
            } {
                if {$mode == "pause"} {
                    break;
                }
            }
        }
        update
        if {$seti(interrupt_getClientStatus)} {
            seti_setStatus force
            break
        }
        after 500
        if {$seti(client_version) >= 2} {
            if {[catch {file mtime $seti(pidfile)} ptime]} {
                set ptime -1
                set seti(pid) ?
            }
            #puts "old=$seti(prev_pidtime) new=$ptime"
            if {$seti(prev_pidtime)  < $ptime} {
                set seti(pid) [seti_getFileText $seti(pidfile)]
                set seti(prev_pidtime) $ptime
            }
            set pid $seti(pid)
        }
        catch {eval exec $seti(_howto_stat)} ps
    }
    $widget(interrupt_getClientStatus) config -state disabled
    set stat [lindex $stat 0]
    return   [list [lindex $stat $seti(_pid_index)] [lindex $stat $seti(_status_index)]]
}

proc {seti_getIdleness} {{init 0}} {
global seti
    if {$seti(_auto_mode) == "manual"} {
        return 0
    }
    set idle 1
    set intdata [seti_getInterrupts]
    for {set n 1} {$n <= $seti(ndevices)} {incr n} {
        if {$seti(_usedev_$n) && $seti(_device_$n) != ""} {
            if {[set idx [lsearch -regexp $intdata "^[lindex [split $seti(_device_$n) :] 0]:"]] >= 0} {
                set nints [lindex [split [lindex $intdata $idx] :] 1]
            }
            if {!$init} {
                if {[expr {$seti(device_${n}_nints) + $seti(_deviceThreshold_$n)}] < $nints} {
                    set idle 0
                }
                if {$seti(_verbose)} {
                    # Checking seti(_verbose) isn't required but it does save doing this arithmetic.
                    seti_verboseMsg "nints $seti(_device_$n): [expr {$nints - $seti(device_${n}_nints)}]"
                }
            }
            set seti(device_${n}_nints) $nints
        }
    }
    return $idle
}

proc {seti_getInterrupts} {{mode nints}} {
global seti
    # mode must be "nints" or "devices"
    set intdata ""
    set ints    [seti_getFileText /proc/interrupts]
    foreach int [split $ints \n] {
        if {[regexp { *([0-9]+): *([0-9]+) *([0-9]*)[ +]*((XT-|IO-)[^ ]+ *)?(.*)} $int match intno nints1 nints2 junk1 junk2 devices]} {
            #seti_verboseMsg "match=$match intno=$intno nints1=$nints1 nints2=$nints2 junk1=$junk1 junk2=$junk2 devices=$devices"
            if {$nints2 == ""} {
                set nints2 0
            }
            set nints [expr $nints1 + $nints2]      
            lappend intdata $intno:[subst $$mode]
        }
    }
    return $intdata
}

proc {seti_getStateFileStatus} {} {
global seti widget
#puts "in seti_getStateFileStatus"
    if {[catch {file mtime $seti(statefile)} stime]} {
        # Client is running but no state file? Maybe next time...
        return
    }
    if {$seti(prev_stime) != $stime} {
        # The state file has been updated.
        if {$seti(prev_stime) == 0} {
            set seti(prev_stime) [expr $stime - 1]
        }
        set seti(stime_inc) [expr $stime - $seti(prev_stime)]
        set seti(prev_stime) $stime
        seti_getVals $seti(statefile)
        seti_checkScores check
        # TTD: we can do this without haveHttp now?
        if {$seti(haveHttp) && $seti(cpu_totsecs) > 0} {
            set seti(cpu_total) [seti_sec2HMS [expr $seti(cpu_totsecs) + $seti(cpu)]]
        }
#puts "seti(cpu_curr)=[seti_sec2HMS $seti(cpu)]"
        set seti(cpu_curr) [seti_sec2HMS $seti(cpu)]
        set seti(cpu_pcnt) [expr $seti(prog) * 100.0]
        wm iconname $widget(tkseti) "[format "%.2f" $seti(cpu_pcnt)]% TkSETI"
        update

        # Run the network stop script after N seconds of client activity if we started the net.
        seti_networkStartStop   stop
    } {
        # No client activity. Maybe next time...
    }
}

proc {seti_getURL} {url {opt wait} {tok {}}} {
global seti widget
    if {!$seti(haveHttp)} {
        return ""
    }
    if {$opt != "wait" && $opt != "process"} {
        set cmd $opt
        set opt nowait
    }
    switch $opt {
        wait {
            seti_verboseMsg "getting URL (wait): $url"
            if {[catch {::http::geturl $url -timeout 20000} tok]} {
                ##seti_verboseMsg "tok=$tok"
                return "$url\n\n$tok"
            }
            return [seti_getURL $url process $tok]
        }
        nowait {
            seti_verboseMsg "getting URL (nowait): $url"
            if {[catch {::http::geturl $url -timeout 20000 -command $cmd} tok]} {
                ##seti_verboseMsg "tok=$tok"
                return "$url\n\n$tok"
            }
            return ""
        }
        process {
            #puts "\n[array get $tok]\n"
            seti_verboseMsg "processing data returned from URL: $url"
            if {![info exists ${tok}(http)]} {
                #puts "\nPlease send the following to rickm@vsl.com:\n\n[array get $tok]"
                return "No data returned from URL: $url"
            }
            #seti_verboseMsg state=[array get $tok]
            if {[string first " 200 " [::http::code $tok]] < 0} {
                ##seti_verboseMsg "tok=$tok code=[::http::code $tok]"
                return "$url\n\n[::http::code $tok]"
            }
            return [::http::data $tok]
        }
    }
}

proc {seti_getUserServerStats} {email_addr} {
global seti widget
    if {!$seti(haveHttp)} {
        return
    }
    
    set seti(users_group)          " (getting stats from server)"
    set seti(users_groupurl)       "    (please stand by)"
    set seti(users_name)           ""
    set seti(users_url)            ""
    set seti(users_units_received) ""
    set seti(users_cpu_total)      ""
    set seti(users_cpu_avg)        ""
    set seti(users_rank)           ""
    set seti(users_position)       ""
    set seti(users_last_return)    ""
    set seti(users_registered_on)  ""
    set seti(users_user_for)       ""
    set statsarr(Group)            ""
    set statsarr(GroupUrl)         ""
    set el "Last result returned:"
    set statsarr($el)              ""

    seti_setServerStr yellow       "Contacting Seti Server: stats for $email_addr..."
    update

    set user [lindex [split $email_addr @] 0]
    set addr [lindex [split $email_addr @] 1]
    
    set bodytemp [seti_getURL "http://$seti(_setihost)/cgi-bin/cgi?email=$user%40$addr&cmd=user_stats_new"]
    
    seti_verboseMsg "URL body:$bodytemp"

    set bodytemp [split $bodytemp \n]
    set nlines   [llength $bodytemp]
    set idx 0
    while {$idx < $nlines} {
        set l  [lindex $bodytemp $idx]
        set squished 0
        while {[string first "<tr>" $l] == 0 && [string first "</tr>" $l] < 0} {
            incr idx
            append l [lindex $bodytemp $idx]
            set squished 1
        }
        if {$squished} {
            seti_verboseMsg "squished line=$l"
        }
        lappend body $l
        incr idx
    }
    if {$nlines != [llength $body]} {
        seti_verboseMsg "URL body squished:$body"
    }

    set stats ""
    foreach l $body {
        seti_verboseMsg "   read stats:$l"
        if {[regexp {<TD>(.*)</TD><TD>([^<]*)</TD>} $l match var val] || \
            [regexp {<td>(.*)</td><td>([^<]*)</td>} $l match var val]} {
            seti_verboseMsg "  match stats1:$var $val"
            lappend stats $var
            lappend stats $val
        } {
            if {[string first "Your rank out" $l] >= 0} {
                regexp {<b>(.*)</b>.*<b>(.*)<sup>} $l match t r
                seti_verboseMsg "  match stats2:$r $t"
                lappend stats "Your rank out of "
                lappend stats $r
                lappend stats " total users is:"
                lappend stats $t
            } elseif {[string first " users who have" $l] >= 0} {
                regexp {<b>(.*)</b>} $l match s
                seti_verboseMsg "  match stats3:$s"
                lappend stats "users who have"
                lappend stats $s
            } elseif {[string first "You have comp" $l] >= 0} {
                regexp {<b>(.*)</b>} $l match p
                seti_verboseMsg "  match stats4:$p"
                lappend stats "You have comp"
                lappend stats $p
            } elseif {[string first "You belong" $l] >= 0} {
                regexp {href="([^"]*)"[^>]*>[^<]*<b>([^<]*)} $l match u g
                seti_verboseMsg "  match stats5:$u $g"
                lappend stats "Group"
                lappend stats $g
                lappend stats "GroupUrl"
                lappend stats $u
            } elseif {[string first "Name (and URL)" $l] >= 0} {
                regexp {href="([^"]*)"[^>]*>([^<]*)<} $l match u n
                seti_verboseMsg "  match stats6:$u $n"
                lappend stats "Name"
                lappend stats $n
                lappend stats "Url"
                lappend stats $u
            }
        }
    }
    array set statsarr $stats
    if {![info exists statsarr(Name)]} {
        set  nameandurl [lindex [array names statsarr Name*] 0]
        if {$nameandurl == ""} {
            set statsarr(Name) ""
            set statsarr(Url)  ""
        } {
            set statsarr(Name) [lindex [split [string trim $statsarr($nameandurl)] &] 0]
            set statsarr(Url)  ""
        }
    }
    
    seti_verboseMsg "    all stats:$stats"
    if {$stats == ""} {
        set body [join $body \n]
        set msg [string range $body [expr 1 + [string last ">" $body]] end]
        bell
        tk_dialog .tkseti "Tk-SETI@Home Error" "Error getting user stats:\n\n$msg" "error" 0 "OK"
        seti_setServerStr yellow        ""
        set  seti(users_units_received) ""
        return
    }
    
    seti_verboseMsg "statsarr: [array get statsarr]"
    set  seti(users_group)          [string trim $statsarr(Group)]
    set  seti(users_groupurl)       [string trim $statsarr(GroupUrl)]
    set  seti(users_name)           [string trim $statsarr(Name)]
    set  seti(users_url)            [string trim $statsarr(Url)]
    set  seti(users_units_received) [format "%7d"  [string trim $statsarr(Results Received)]]
    set totalcpu                    [string trim $statsarr(Total CPU Time)]
    if {[string first "years" $totalcpu] >= 0} {
        set seti(users_cpu_total)   [format "%17s" $totalcpu]
    } {
        scan $totalcpu              "%s %s %s" h a m
        #scan $totalcpu              "%s %s %s %s %s" h a m b s
        #set  seti(users_cpu_total)  [seti_sec2HMS [seti_HMS2sec $h $m $s]]
        set  seti(users_cpu_total)  [format "%7s hr %2s min" $h $m]
    }
    set   averagecpu                [lindex [split [string trim $statsarr(Average CPU Time per work unit)] &] 0]
    scan $averagecpu                "%s %s %s %s %s" h a m b s
    set  seti(users_cpu_avg)        [seti_sec2HMS [seti_HMS2sec $h $m $s]]
    set  seti(users_rank)           [format "%7d out of %d total users" $statsarr(Your rank out of ) $statsarr( total users is:)]
    set  seti(users_position)       [format "%12s along with %d others" $statsarr(You have comp) [expr $statsarr(users who have) - 1]]
    set  seti(users_last_return)    $statsarr(Last result returned:)
    set  seti(users_registered_on)  $statsarr(Registered on:)
    set  seti(users_user_for)       [format "%17s" [string trim $statsarr(SETI@home user for:)]]
    
    seti_setServerStr  $seti(_ro_entry_bg)  "On-line"

    seti_setBrowseButtons userurl groupurl  
    if {$seti(users_groupurl) == ""} {
        $widget(browse_groupurl) config -state disabled
    } 
    if {$seti(users_url) == ""} {
        $widget(browse_userurl)  config -state disabled
    }
}

proc {seti_getVals} {file} {
global seti
    set vals [seti_getFileText $file]
    foreach l [split $vals \n] {
        set ll [split $l =]
        set seti([lindex $ll 0]) [lindex $ll 1]
    }
}

proc {seti_getWorkUnitInfo} {file} {
global seti

    if {[catch {open $file r} fin]} {
        return
    }
    while {[gets $fin l] >= 0} {
        set ll [split $l =]
        set seti([string trim [lindex $ll 0]]) [string trim [lindex $ll 1]]
        if {[string first "end_seti_header" [lindex $ll 0]] >= 0} {
            break
        }
    }
    close $fin
    regexp {(.*) \((.*)\)} $seti(time_recorded) match seti(time_recorded_raw) seti(time_recorded_fmt)
    set seti(time_recorded_fmt) " $seti(time_recorded_fmt)"
}

proc {seti_getWorkUnitStatus} {} {
global seti widget
    if {[catch {file mtime $seti(workfile)} wtime]} {
        # No work file; assume client is retrieving the next one.
        #set  seti(units_sent)      ""
        set  seti(units_received)  " (starting new work unit)"
        set  seti(cpu_total)       "    (please stand by)"
        set  seti(cpu_avg)         ""
        set  seti(cpu_curr)        ""
        set  seti(cpu_pcnt)        0
        set  seti(cpu)             0
        # Optionally run the network start script after N seconds of having no work unit.
        seti_networkStartStop      start

        return 0
    }
    set seti(wu_start_time) 0
    
    if {$seti(prev_wtime) != $wtime} {
        # New workfile just received; get new stats from the user_file and new info from workfile.
        seti_getVals              $seti(userfile)
        seti_getWorkUnitInfo      $seti(workfile)
        set  seti(prev_wtime)     $wtime
        #set  seti(units_sent)     [format "%7d" $seti(nwus)]
        set  seti(units_received) [format "%7d" $seti(nresults)]
        set  seti(cpu_totsecs)    $seti(total_cpu)
        if {$seti(nresults) == 0} {
            set seti(cpu_avg)     ""
        } {
            set seti(cpu_avg)     [seti_sec2HMS [expr $seti(total_cpu) / $seti(nresults)]]
        }

        seti_saveWUcoordinates
        
        seti_checkTkSetiVersion check

        ### Changes to the SETI@Home web site make these checks unavailable.
        ###seti_checkFamous check

        seti_setServerStr  $seti(_ro_entry_bg)  "On-line"

        seti_skymap reset
    } {
        if {$seti(needToSaveLocs)} {
            # A previous attempt failed (to get the file lock) so try again
            seti_saveWUcoordinates
        }
    }
    return 1
}

proc {seti_help} {opt args} {
global seti widget
    set w $widget(setup).help
    switch $opt {
        show {
            if {[winfo exists $w]} {
                wm deiconify  $w
                raise $w
                return
            }

            if {![winfo exists $widget(setup)]} {
                seti_setupTabsInit
            }
            
            toplevel  $w
            wm title  $w "TkSETI@Home - Help"
            
            frame     $w.opts
            pack      $w.opts -side top
            button    $w.opts.quit -text "OK" -command "destroy $w"
            pack      $w.opts.quit -side left -pady 2 -padx 20
            
            # Create a scrollbar and a text box in the help window.
            scrollbar $w.scrollx -orient horiz -command "$w.text xview"
            pack      $w.scrollx -side bottom -fill x
            scrollbar $w.scrolly -command "$w.text yview"
            pack      $w.scrolly -side right  -fill y
            text      $w.text -relief sunken -bd 2 -yscrollcommand "$w.scrolly set"  -xscrollcommand "$w.scrollx set" -setgrid 1 -height 24 -width 82  -font dialogfont
            pack      $w.text -side left -fill both -expand yes
            $w.text   insert end \n$seti(usage)\n
            $w.text   insert end $seti(helptext)
            $w.text   configure -state disabled
        }
        hide {
            wm withdraw $w
        }
    }
}

proc {seti_launchBrowser} {url} {
global seti
    #seti_verboseMsg "url=$url; [subst $seti(_howto_browse)]"
    if {[catch {eval exec [subst $seti(_howto_browse)] &} rep]} {
        bell
        set msg "Can't execute browser:\n$seti(_howto_browse):\n\n$rep"
        seti_verboseMsg "*** ERROR - $msg"
        tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
   }
}

proc {seti_moveMasterDir} {olddir newdir} {
global seti
    
    seti_verboseMsg "Comparing $olddir/.tksetimasterlocs and highs to $newdir/.tksetimasterlocs and highs"
    # Compare the locs in the old and new master dirstories.
    set oldlocs [split [seti_getFileText $olddir/.tksetimasterlocs] \n]
    set newlocs [split [seti_getFileText $newdir/.tksetimasterlocs] \n]
    foreach loc $oldlocs {
        if {[lsearch $newlocs $loc] < 0} {
            lappend   newlocs $loc
        }
    }

    # Compare the highs in the old and new master dirstories.
    foreach {code type name} "bs Spike power bg Gaussian score bp Pulse score bt Triplet power" {
        set old_${code}_score $seti(master_${code}_score)
        set old_${code}_power $seti(master_${code}_power)
        set old_${code}_date  $seti(master_${code}_date)
        set old_${code}_loc   $seti(master_${code}_loc)
    }
    catch {source $newdir/.tksetimasterhighs}
    foreach {code type name} "bs Spike power bg Gaussian score bp Pulse score bt Triplet power" {
        if {$seti(master_${code}_$name)  < [set old_${code}_$name]} {
            set seti(master_${code}_score) [set old_${code}_score]
            set seti(master_${code}_power) [set old_${code}_power]
            set seti(master_${code}_date)  [set old_${code}_date]
            set seti(master_${code}_loc)   [set old_${code}_loc]
        }
        # Force update of values in main screen.
        set seti(new_${code}_score)   " $seti(master_${code}_score)"
        set seti(new_${code}_power)   " $seti(master_${code}_power)"
        set seti(new_${code}_date)    " $seti(master_${code}_date)"
    }
    
    # We have to wait for this lock!
    while {[set lockerpid [seti_Lock $newdir]] != ""} {
        bell
        set msg "Trying to merge WU locations and Top Scores into new Master Directory.\n\nCan't get TkSETI lock in $newdir.\n\nLocked by PID: $lockerpid\n\nPlease fix and try again."
        seti_verboseMsg $msg
        tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
    }

    # Save locations
    set    ofd [open $newdir/.tksetimasterlocs "w"]
    puts  $ofd [join $newlocs \n]
    close $ofd
    # Force use of new loc list.
    set seti(masterlocs) $newlocs
    seti_skymap reset

    # Save high scores.
    set    ofd [open $newdir/.tksetimasterhighs "w"]
    foreach {code type name other} "bs Spike power score bg Gaussian score power bp Pulse score power bt Triplet power score" {
        puts  $ofd "set seti(master_${code}_$name)  \{$seti(master_${code}_$name)\}"
        puts  $ofd "set seti(master_${code}_$other) \{$seti(master_${code}_$other)\}"
        puts  $ofd "set seti(master_${code}_loc)    \{$seti(master_${code}_loc)\}"
        puts  $ofd "set seti(master_${code}_date)   \{$seti(master_${code}_date)\}"
    }
    close $ofd

    seti_Lock $seti(_master_dir) unlock
    
    file rename -force $olddir/.tksetimasterlocs  $olddir/.tksetimasterlocs-MERGED
    file rename -force $olddir/.tksetimasterhighs $olddir/.tksetimasterhighs-MERGED
    seti_verboseMsg "Merged $olddir/.tksetimasterlocs  into $newdir/.tksetimasterlocs"
    seti_verboseMsg "Merged $olddir/.tksetimasterhighs into $newdir/.tksetimasterhighs"
}

proc {seti_networkStartStop} {mode} {
global seti
    #if {$seti(temp)} {
    #    set seti(we_started_network) 1
    #    set seti(temp) 0
    #}
    seti_verboseMsg "we started network=$seti(we_started_network)"
    if {!$seti(_auto_net_mode) || $seti(_howto_${mode}net) == ""} {
        return
    }
    if {$mode == "stop"} {
        if {!$seti(we_started_network)} {
            return
        }
        incr seti(wu_stop_time)  $seti(stime_inc)
    } {
        # mode == start
        incr seti(wu_start_time) $seti(loop_intv)
        if {$seti(_nodial_mode)} {
            set day [clock format [clock seconds] -format "%w"]
            if {$seti(_nodial_$day)} {
                set time  [clock seconds]
                set stop  [clock scan $seti(_nodial_stop)]
                set start [clock scan $seti(_nodial_start)]
                if {$time > $stop && $time < $start} {
                    set left [expr int(([expr $start - $time] + $seti(loop_intv) - 1)/$seti(loop_intv)) * $seti(loop_intv)]
                    set left [seti_sec2HMS $left 2]
                    seti_verboseMsg "not running network start; $left left in no-dial time period"
                    seti_setServerStr $seti(_ro_entry_bg) "$left left before network auto $mode"
                    return
                }
            }
        }
    }
    seti_verboseMsg "$mode time check: $seti(wu_${mode}_time) < $seti(_wu_${mode}_time) ?"
    if {$seti(wu_${mode}_time) < $seti(_wu_${mode}_time)} {
        set left [expr $seti(_wu_${mode}_time) - $seti(wu_${mode}_time)]
        seti_setServerStr $seti(_ro_entry_bg) "[seti_sec2HMS $left 2] left before network auto $mode"
    } {
        seti_verboseMsg "Running network ${mode} script..."
        if {$mode == "start"} {
            seti_actions kill
        }
        set pid $seti(pid)
        seti_setServerStr yellow  "Running network ${mode} script..."
        update idletasks
        if {[catch {eval exec $seti(_howto_${mode}net)} rep]} {
            bell
            seti_setServerStr yellow  "Running network ${mode} script...FAILED"
            set msg "Can't execute network ${mode} script:\n$seti(_howto_${mode}net):\n\n$rep"
            seti_verboseMsg "*** ERROR - $msg"
            #tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
        } {
            seti_setServerStr $seti(_ro_entry_bg) "Running network ${mode} script...OK"
            if {$rep != ""} {
                seti_verboseMsg $rep
            }
        }
        set seti(wu_stop_time)  0
        set seti(wu_start_time) 0
        if {$mode == "start"} {
            seti_actions run
            set seti(we_started_network) 1
        } {
            set seti(we_started_network) 0
        }
    }
}

proc {seti_savePrefs} {} {
global seti

    set ofp [open $seti(setidir)/.tksetirc "w"]
    foreach var [lsort [array names seti]] {
        if {[string index $var 0] == "_"} {
            puts $ofp "set seti($var) \{$seti($var)\}"
        }
    }
    close $ofp
}

proc {seti_saveWUcoordinates} {} {
global seti

    set saveLoc  0
    set saveHigh 0
    set lfile $seti(_master_dir)/.tksetimasterlocs
    set hfile $seti(_master_dir)/.tksetimasterhighs
    set locs  [split [seti_getFileText $lfile] \n]
    set loc  "$seti(start_ra) $seti(end_ra) $seti(start_dec) $seti(end_dec)"
    if {[lsearch $locs $loc] < 0} {
        set saveLoc 1
    }
    catch {source $hfile}
    foreach {code type name} "bs Spike power bg Gaussian score bp Pulse score bt Triplet power" {
        if {$seti(my_${code}_$name) > $seti(master_${code}_$name)} {
            set saveHigh 1
        }
    }

    if {$saveLoc || $saveHigh} {
        if {[set lockerpid [seti_Lock $seti(_master_dir)]] != ""} {
            # Couldn't get lock
            puts "couldn't get lock; locked by PID: $lockerpid"
            set seti(needToSaveLocs) 1
        } {
            if {$saveLoc} {
                set    ofd [open $lfile "a+"]
                puts  $ofd $loc
                close $ofd
                lappend locs $loc
            }
            if {$saveHigh} {
                set    ofd [open $hfile "w"]
                foreach {code type name other} "bs Spike power score bg Gaussian score power bp Pulse score power bt Triplet power score" {
                    if {   $seti(master_${code}_$name) < $seti(my_${code}_$name)} {
                        set seti(master_${code}_$name)   $seti(my_${code}_$name)
                        set seti(master_${code}_$other)  $seti(my_${code}_$other)
                        set seti(master_${code}_loc)     $seti(my_${code}_loc)
                        set seti(master_${code}_date)    $seti(my_${code}_date)
                    }
                    puts  $ofd "set seti(master_${code}_$name)  \{$seti(master_${code}_$name)\}"
                    puts  $ofd "set seti(master_${code}_$other) \{$seti(master_${code}_$other)\}"
                    puts  $ofd "set seti(master_${code}_loc)    \{$seti(master_${code}_loc)\}"
                    puts  $ofd "set seti(master_${code}_date)   \{$seti(master_${code}_date)\}"
                }
                close $ofd
            }
            seti_Lock $seti(_master_dir) unlock
            set seti(needToSaveLocs) 0
        }
    } {
        set seti(needToSaveLocs) 0
    }
    set seti(masterlocs) $locs
}

proc {seti_sec2HMS} {secs {fmt 1}} {
set h [expr {int($secs / 3600.0)}]
    set m [expr {int(($secs - $h * 3600.0) / 60.0)}]
    set s [expr {$secs - $h * 3600.0 - $m * 60.0}]

    if {$fmt == "1"} {
        return [format "%7d hr %2d min %4.1f sec" $h $m $s]
    } elseif {$fmt == "2"} {
        return [format "%02d:%02d:%02d" $h $m [expr int($s)]]
    } elseif {$fmt == "3"} {
        return [format "%4d hr %2d min %4.1f sec" $h $m $s]
    } elseif {$fmt == "4"} {
        return [format "%4d deg %2d min %4.1f sec" $h $m $s]
    }
}

proc {seti_setBrowseButtons} {args} {
global seti widget
    if {$seti(_howto_browse) == ""} {
        set state disabled
    } {
        set state normal
    }
    foreach button $args {
        $widget(browse_$button) config -state $state
    }
}

proc {seti_setColours} {wtop} {
global seti widget
    if {[lsearch -exact "Frame Toplevel" [winfo class $wtop]] >= 0} {
        set children [winfo children $wtop]
    } {
        set children $wtop
    }
    foreach w $children {
        if {[winfo class $w] == "Frame"} {
            seti_setColours $w
            continue
        }
        if {[winfo class $w] == "Entry"} {
            if {[$w cget -state] == "disabled"} {
                catch {$w config -foreground $seti(_ro_entry_fg)}
                if {[$w cget -background] != "white" && [$w cget -background] != "#ffffff"} {
                    catch {$w config -background $seti(_ro_entry_bg)}
                }
            }
        }
        if {[winfo class $w] == "Canvas"} {
            catch {$w itemconfig load -fill $seti(_load_graph)}
            catch {$w itemconfig text -fill $seti(_load_title)}
        }
        if {[winfo class $w] == "Scale"} {
            catch {$w config -troughcolor $seti(_prog_trough)}
        }
    }
}

proc {seti_setFonts} {} {
global seti
    foreach  name [array names seti _*Font] {
        set  name [string trim $name _]
        set  f    [string tolower $name]
        set  seti($name)   $seti(_$name)
        eval font configure $f [font actual $seti(_$name)]
    }
}

proc {seti_setMode} {{quiet {}}} {
global seti widget
    
    if {$seti(_stop_by) == "pause"} {
        set seti(client_start_label) "Continue Client"
        set seti(client_stop_label)  "Pause    Client"
    } {
        set seti(client_start_label) "Run  Client"
        set seti(client_stop_label)  "Kill Client"
    }

    set disabledcolour [$widget(auto_button) cget -disabledforeground]
    
    if {!$seti(haveProc)} {
        set seti(_auto_mode) manual
        seti_toggleDisabled disabled $widget(auto_button)    $disabledcolour
    }
    
    if {$seti(_auto_mode) == "manual"} {
        seti_toggleDisabled disabled $widget(auto_frame_top) $disabledcolour
    } {
        seti_toggleDisabled normal   $widget(auto_frame_top)     $disabledcolour
               
        if {$seti(_start_mode) == "manual"} {
            seti_toggleDisabled disabled $widget(start_frame)  $disabledcolour
        } {
            seti_toggleDisabled normal   $widget(start_frame)  $disabledcolour
        }
        if {$seti(_start_mode) == "manual" && $seti(_stop_mode) == "manual"} {
            seti_toggleDisabled disabled $widget(auto_frame)   $disabledcolour
        } {
            seti_toggleDisabled normal   $widget(auto_frame)   $disabledcolour
            for {set i 1} {$i <= 6} {incr i} {
                seti_chooseDevice use $i $quiet
            }
        }
    }

    if {$seti(_norun_mode)} {
        seti_toggleDisabled normal   $widget(norun_frame)  $disabledcolour
    } {
        seti_toggleDisabled disabled $widget(norun_frame)  $disabledcolour
    }

    if {$seti(_auto_net_mode)} {
        seti_toggleDisabled normal   $widget(auto_net_frame)  $disabledcolour
        if {$seti(_nodial_mode)} {
            seti_toggleDisabled normal   $widget(nodial_frame)  $disabledcolour
        } {
            seti_toggleDisabled disabled $widget(nodial_frame)  $disabledcolour
        }
    } {
        seti_toggleDisabled disabled $widget(auto_net_frame)  $disabledcolour
    }
}

proc {seti_setModeStr} {} {
global seti
    if {$seti(_auto_mode) == "manual" ||  ($seti(_start_mode) == "manual" && $seti(_stop_mode) == "manual")} {
        set seti(mode_str) " Manual client Start/Stop"
    } {
        if {$seti(_start_mode) == "manual"} {
            set seti(mode_str) " Manual client Start;"
        } {
            set seti(mode_str) " Auto client Start after $seti(_start_after) secs of idleness;"
        }
        if {$seti(_stop_mode) == "manual"} {
            append seti(mode_str) " Manual client Stop"
        } {
            append seti(mode_str) " Auto client Stop ($seti(_stop_by))"
        }
    }
}

proc {seti_setServerStr} {colour str} {
global seti widget
    set seti(server_str) " $str"
    $widget(server_str)  config -background $colour
}

proc {seti_setStatus} {{force {}}} {
global seti widget

    if {$force != "" || !$seti(we_stopped_client)} {
        # No need to keep checking status if we stopped the client.
        set stat [seti_getClientStatus status]
        seti_verboseMsg "setStatus stat=$stat"
        if {[lindex $stat 0] == ""} {
            set seti(status) notrunning
        } elseif {[lindex $stat 0] == "error"} {
            set seti(status) error
            set seti(status_str) " [lindex $stat 1]"
        } {
            set seti(pid) [lindex $stat 0]
            
            #if {[lsearch $seti(_pause_flags) [lindex $stat 1]] >= 0}
            if {[string match *\[$seti(_pause_flags)\]* [lindex $stat 1]]} {
                set seti(status) paused
            } {
                set seti(status) running
            }
        }
    }

    switch $seti(status) {
        running {
            set seti(expected_status) running
            set seti(status_str) " Running (pid $seti(pid))"
            set normal "kill pause"
            $widget(status_str)  config -background $seti(_ro_entry_bg)
            if {$seti(client_was_notrunning)} {
                seti_getClientVersion
                seti_setTitle
                set  seti(client_was_notrunning) 0
            }
        }
        notrunning {
            set seti(lastCPU)    0
            set seti(status_str) " Not Running"
            set normal "run"
            $widget(status_str)  config -background pink
            set seti(client_was_notrunning) 1
        }
        paused {
            set seti(expected_status) running
            set seti(status_str) " Paused (pid $seti(pid))"
            set normal "kill continue"
            $widget(status_str)  config -background pink
        }
        error {
            set seti(lastCPU)    0
            set normal ""
            $widget(status_str)  config -background pink
        }
    }

    foreach button "run kill pause continue" {
        if {[lsearch -exact $normal $button] < 0} {
            $widget($button) config -state disabled
        } {
            $widget($button) config -state normal
        }
    }
}

proc {seti_setTitle} {{msg {}}} {
global seti widget
    if {[info exists seti(email_addr)]} {
        set user " - $seti(email_addr)"
    } {
        set user ""
    }
    wm title $widget(tkseti) "Tk-SETI@Home Monitor v$seti(tksetiVersion)$msg$user - $seti(_client_name) on [info hostname] - Setiathome Client v$seti(client_version)"
}

proc {seti_setup} {{runcheck {}}} {
global seti widget
    set w  $widget(setup)

    if {![winfo exists $w]} {
        seti_setupTabsInit
    }

    catch {set prev_master_dir [glob $seti(_master_dir)]}
    
    Window show $w
    if {[info exists seti(email_addr)]} {
        set user " - $seti(email_addr)"
    } {
        set user ""
    }
    wm title $w "Tk-SETI@Home$user - $seti(_client_name) on [info hostname] - Setup"

    seti_setColours $w
    
    seti_setMode quiet
    set done 0
    while {!$done} {
        grab   $w
        if {$runcheck != ""} {
            seti_setupCheck
            seti_setMode
            set runcheck ""
        }
        tkwait variable seti(setup_done)
        grab   release  $w
        if {![seti_setupCheck]} {
            set done 1
        }
    }
    Window hide $w
    seti_setStatus force
    seti_setModeStr
    seti_savePrefs
    seti_setColours $widget(tkseti)
    seti_setFonts
    seti_setBrowseButtons tksetiHome setiHome
    seti_getIdleness 1

    if {$prev_master_dir != $seti(_master_dir)} {
        seti_moveMasterDir $prev_master_dir $seti(_master_dir)
    }
}

proc {seti_setupCheck} {{squawk verbose} {section all}} {
global seti widget env
    set msg ""
    switch $section {
        all {
            foreach s $seti(setup_sections) {
                if {[set ret [seti_setupCheck $squawk $s]] != "0"} {
                    set seti(setup_startuptab) $s
                    return $ret
                }
            }
            return 0
        }
        general {
            set e .setup_e
            destroy $e
            entry   $e
            foreach {var name title} {_ro_entry_fg foreground "Text field" _ro_entry_bg background "Text field" _prog_trough troughcolor "Progress Scale" _load_graph color "CPU Usage graph" _load_title color "CPU Usage title" _note_tabs selectcolor "Setup Notebook tabs"} {
                set seti($var)  [string trim $seti($var)]
                if {[catch {$e config -foreground $seti($var)} rep]} {
                    set msg "Error checking $title $name:\n\n$rep"
                }
            }
            destroy $e
            set  seti(_master_dir) [string trim $seti(_master_dir)]
            if {$seti(_master_dir) == "." || $seti(_master_dir) == ".."} {
                set msg "Error: Master Directory must be an actual pathname, not just \"$seti(_master_dir)\""
            } elseif {$seti(_master_dir) != ""} {
                if {[catch {glob $seti(_master_dir)}]} {
                    set msg "Error: Master Directory does not exist: $seti(_master_dir)"
                } {
                    if {[llength [glob $seti(_master_dir)]] > 1} {
                        set msg "Error: invalid  Master Directory: $seti(_master_dir)"
                    } {
                        set seti(_master_dir) [glob $seti(_master_dir)]
                    }
                }
            }
            foreach {var title} {_master_dir "Master Directory"} {
                set  seti($var) [string trim $seti($var)]
                if {$seti($var) == ""} {
                    set msg "Error: a value must be given for the $title entry"
                    break
                }
            }
        }
        helpers {
            catch {unset env(HTTP_PROXY)}
            if {$seti(_proxy_host) != "" && $seti(_proxy_port) != ""} {
                set env(HTTP_PROXY) $seti(_proxy_host):$seti(_proxy_port)
            }
            if {$seti(haveHttp)} {
                ::http::config -proxyhost $seti(_proxy_host) -proxyport $seti(_proxy_port)
            }
            foreach {v t c} {pause Pause STOP cont Continue CONT kill Kill KILL} {
                if {![regexp {\$pid($|[ |>])} $seti(_howto_$v)]} {
                    set msg "Invalid value for Howto $t: '$seti(_howto_$v)'. It must contain '\$pid'.\n\nFor example:\n\nkill -$c \$pid"
                    break
                }
            }
            foreach {code name} {pid PID status Status} {
                set seti(_${code}_index) [string trim $seti(_${code}_index)]
                if {![regexp {^[0-9]*$} $seti(_${code}_index)]} {
                    set msg "Invalid STAT string $name Index: $seti(_${code}_index)"
                }
            }
        }
        automodes {
            if {$seti(_start_mode) == "auto"} {
                set seti(_start_after) [string trim $seti(_start_after)]
                if {$seti(_start_after) == ""} {
                    set msg "No \"Start After\" value for specified for Auto Start"
                } elseif {![regexp {^[1-9][0-9]*$} $seti(_start_after)]} {
                    set msg "Invalid \"Start After\" value specified for Auto Start: '$seti(_start_after)'"
                }
            }
            if {$seti(_auto_mode) == "auto" ||  $seti(_start_mode) == "auto" || $seti(_stop_mode) == "auto"} {
                if {!$seti(_usedev_1) && !$seti(_usedev_2) && !$seti(_usedev_3) && !$seti(_usedev_4) && !$seti(_usedev_5) && !$seti(_usedev_6)} {
                    set msg "In auto mode, you must use at least one device (usually the keyboard and mouse) as an idleness indicator."
                }
                foreach dev [array names seti _usedev_*] {
                    set n [lindex [split $dev _] 2]
                    if {$seti($dev) && $seti(_device_$n) == ""} {
                        set msg "Device $n enabled but no device selected."
                        break
                    }
                }
            }
            
            if {$seti(_norun_mode)} {
                set ok 0
                for {set day 0} {$day < 7} {incr day} {
                    if {$seti(_norun_$day)} {
                        set ok 1
                        break
                    }
                }
                if {!$ok} {
                    set msg "\"Do Not Run\" feature selected but no days specified."
                }
                foreach {code name} {stop begin start end} {
                    set seti(_norun_$code) [string trim $seti(_norun_$code)]
                    if {![regexp {^(([0-1][0-9])|(2[0-3])):[0-5][0-9]$} $seti(_norun_$code)]} {
                        set msg "Error in \"Do Not Run\" $name time:\n\nUnable to convert time string \"$seti(_norun_$code)\""
                    } {
                        set $code [clock scan $seti(_norun_$code)]
                    }
                }
                if {![catch {set diff [expr $start - $stop]} rep] && $diff <= 0} {
                    set msg "Error in \"Do Not Run\" times:\n\nBegin time must be before End time"
                }
            }

            set seti(_howto_startnet) [string trim $seti(_howto_startnet)]
            set seti(_howto_stopnet)  [string trim $seti(_howto_stopnet)]
            if {$seti(_auto_net_mode)} {
                if {"$seti(_howto_startnet)$seti(_howto_stopnet)" == ""} {
                    set msg "Auto Run Network selected but no Start/Stop scripts specified."
                }
                foreach {mode name} {start Start stop Stop} {
                    set seti(_wu_${mode}_time) [string trim $seti(_wu_${mode}_time)]
                    if {$seti(_howto_${mode}net) != ""} {
                        if {$seti(_wu_${mode}_time) == ""} {
                            set msg "No \"$name Net After\" time (seconds) specified."
                        } elseif {![regexp {^[1-9][0-9]*$} $seti(_wu_${mode}_time)]} {
                            set msg "Invalid \"$name Net After\" time (seconds): '$seti(_wu_${mode}_time)'"
                        }
                    }
                }
                if {$seti(_nodial_mode)} {
                    set ok 0
                    for {set day 0} {$day < 7} {incr day} {
                        if {$seti(_nodial_$day)} {
                            set ok 1
                            break
                        }
                    }
                    if {!$ok} {
                        set msg "\"Do Not Dial\" feature selected but no days specified."
                    }
                    foreach {code name} {stop begin start end} {
                        set seti(_nodial_$code) [string trim $seti(_nodial_$code)]
                        if {![regexp {^(([0-1][0-9])|(2[0-3])):[0-5][0-9]$} $seti(_nodial_$code)]} {
                            set msg "Error in \"Do Not Dial\" $name time:\n\nUnable to convert time string \"$seti(_nodial_$code)\""
                        } {
                            set $code [clock scan $seti(_nodial_$code)]
                        }
                    }
                    if {![catch {set diff [expr $start - $stop]} rep] && $diff <= 0} {
                        set msg "Error in \"Do Not Dial\" times:\n\nBegin time must be before End time"
                    }
                }
            }
        }
        default {
            bell
            set msg "Internal program error - setup section unknown to setupCheck: $section"
            tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
            return 1
        }
    }
    
    if {$msg != ""} {
        if {$squawk == "verbose"} {
            #set seti(setup_tab) $section
            seti_setupTabs $section
            bell
            tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
        }
        return 1
    }
    return 0
}

proc {seti_setupTabs} {{tab {}}} {
global seti widget
    if {$tab == ""} {
        set tab $seti(setup_tab)
    }
    set seti(setup_tab) $tab
    foreach frame $seti(setup_sections) {
        if {$frame == $seti(setup_tab)} {
            pack $widget(setup_$frame) -fill x
            catch {$widget(setup_tab_$frame) config -selectcolor $seti(_note_tabs)  -activebackground $seti(_note_tabs)}
        } {
            pack forget $widget(setup_$frame)
            catch {$widget(setup_tab_$frame) config -selectcolor $seti(_note_tabs)  -activebackground [$widget(auto_button) cget -activebackground]}
        }
    }
    set seti(setup_prevtab) $tab
}

proc {seti_setupTabsChange} {{tab {}}} {
global seti widget
    if {$tab == ""} {
        set tab $seti(setup_tab)
    }
    if {[seti_setupCheck verbose $seti(setup_prevtab)]} {
        set seti(setup_tab) $seti(setup_prevtab)
        return
    }
    seti_setupTabs $tab
}

proc {seti_setupTabsInit} {} {
global seti widget

    Window show $widget(setup)
    Window hide $widget(setup)

    set seti(setup_prevtab) ""
    seti_setupTabs none
    # Clear the geometry settings so the window resizes
    wm geometry $widget(setup) ""
    update idletasks
    set wmx [winfo reqwidth  $widget(setup)]
    set wmy [winfo reqheight $widget(setup)]
    #puts "wm  x/y=$wmx/$wmy"
    
    set xmax 0
    set ymax 0
    foreach frame $seti(setup_sections) {
        set x [winfo reqwidth  $widget(setup_$frame)]
        set y [winfo reqheight $widget(setup_$frame)]
        if {$xmax < $x} {
           set xmax $x
        }
        if {$ymax < $y} {
           set ymax $y
        }
    }
    #puts "max x/y=$xmax/$ymax"
    
    wm geometry $widget(setup) ${xmax}x[expr $wmy + $ymax]
    seti_setupTabs $seti(setup_startuptab)
}

proc {seti_skymap} {opt {x {}} {y {}}} {
global seti widget
    set w $widget(SkymapCanvas)
    switch $opt {
        show {
            if {[lsearch -exact  [image names]  "skymap"] < 0} {
                image create photo skymap -data [seti_skymapImage]
            }
            if {[winfo exists $widget(Skymap)]} {
                Window show   $widget(Skymap)
            } {
                Window show   $widget(Skymap)
                if {[info exists  seti(email_addr)]} {
                    set user " - $seti(email_addr)"
                } {
                    set user ""
                }
                wm title $widget(Skymap) "Tk-SETI@Home$user - $seti(_client_name) on [info hostname] - Sky Map"
                $w create  image 0 0 -image skymap -anchor nw -tags skymap
                $w config -scrollregion [$w bbox skymap]
                wm protocol $widget(Skymap) WM_DELETE_WINDOW "seti_skymap hide"
            }
            seti_skymap set
            seti_setColours $widget(Skymap)
        }
        set {
            #set ra  [expr ($seti(start_ra)  + $seti(end_ra))  / 2.0]
            #set dec [expr ($seti(start_dec) + $seti(end_dec)) / 2.0]
            set ra  $seti(start_ra)
            set dec $seti(start_dec)

            set seti(skymap_ra)  [seti_sec2HMS [expr $ra  * 60 * 60] 3]
            set seti(skymap_dec) [seti_sec2HMS [expr $dec * 60 * 60] 4]

            if {8.0 <= $ra && $ra <= 12.0} {
                set text "<=== You are looking here"
                set anchor w
            } {
                set text "You are looking here ===>"
                set anchor e
            }
            
            if {$ra > 12} {
                set x [expr 1.5 - $ra / 24.0]
            } {
                set x [expr 0.5 - $ra / 24.0]
            }
            set y [expr 1.0 - ($dec + 90.0)/180.0]
            
            set     bbox [$w bbox skymap]
            while {$bbox == ""} {
                after 500
                update
                set bbox [$w bbox skymap]
            }
            
            $w delete arrow
            destroy   $w.l
            label     $w.l -text $text -foreground $seti(_ro_entry_fg) -background $seti(_ro_entry_bg) -font dialogfont
            set xs [lindex $bbox 2]
            set ys [lindex $bbox 3]
            $w create window [expr $xs * $x] [expr $ys * $y]  -window $w.l -tags arrow -anchor $anchor
            $widget(SkymapButton) config -text "Hide Arrow"
            update idletasks
            $w xview moveto [expr $x + ([join [$w xview] -]) / 2.0]
            $w yview moveto [expr $y + ([join [$w yview] -]) / 2.0]

            if {[$w type locs] == ""} {
                foreach loc $seti(masterlocs) {
                    foreach {x y} [seti_skymap_calcXY $loc $xs $ys] { break }
                    $w create rect [expr {$x - 3}] [expr {$y - 3}] [expr {$x + 3}] [expr {$y + 3}] -tags locs -fill green
                }
                $w raise locs
                set msg ""
                foreach {code tag color size} "bs Spike cyan 9 bg Gaussian green 12 bp Pulse yellow 6 bt Triplet white 15" {
                    if {$seti(master_${code}_loc) == "0 0 0 0"} {
                        $widget(Skymap${tag}Button) config -state disabled
                        if {!$seti(_notfied_user_unknown_high_loc)} {
                            if {$msg != ""} {
                                append msg " and "
                            }
                            append msg $tag
                        }
                    } {
                        $widget(Skymap${tag}Button) config -state normal
                        foreach {x y} [seti_skymap_calcXY $seti(master_${code}_loc) $xs $ys] { break }
                        $w create oval [expr {$x - $size}] [expr {$y - $size}]  [expr {$x + $size}] [expr {$y + $size}] -tags $tag -outline $color
                        $w raise $tag
                    }
                }
                if {$msg != ""} {
                    set seti(_notfied_user_unknown_high_loc) 1
                    seti_savePrefs
                    if {[string first "and" $msg] < 0} {
                        set msg "$msg was"
                    } {
                        set msg "$msg were"
                    }
                    set msg "Your top $msg found before TkSETI started recording locations and cannot be marked on the SkyMap.\n\nFuture top locations will be indicated."
                    bell
                    tk_dialog .tkseti "Tk-SETI@Home Notice" $msg "info" 0 "OK"
                }
            }
        }
        reset {
            if {[winfo exists $widget(Skymap)]} {
                $w delete locs Gaussian Spike Pulse Triplet
                seti_skymap set
                if {[string first "Show" [$widget(SkymapGaussianButton) cget -text]] >= 0} {
                    # Gaussian was hidden, so hide it again
                    $w lower Gaussian
                }
                if {[string first "Show" [$widget(SkymapLocsButton) cget -text]] >= 0} {
                    # locs were hidden, so hide them again
                    $w lower locs
                }
                if {[string first "Show" [$widget(SkymapSpikeButton) cget -text]] >= 0} {
                    # Spike was hidden, so hide it again
                    $w lower Spike
                }
                if {[string first "Show" [$widget(SkymapPulseButton) cget -text]] >= 0} {
                    # Pulse was hidden, so hide it again
                    $w lower Pulse
                }
                if {[string first "Show" [$widget(SkymapTripletButton) cget -text]] >= 0} {
                    # Triplet was hidden, so hide it again
                    $w lower Triplet
                }
            }
        }
        hide {
            Window hide $widget(Skymap)
        }
        togglearrow {
            if {[string first "Hide" [$widget(SkymapButton) cget -text]] >= 0} {
                $w delete arrow
                destroy $w.l
                $widget(SkymapButton) config -text "Show Arrow"
            } {
                seti_skymap set
            }
        }
        togglegaussian {
            if {[string first "Hide" [$widget(SkymapGaussianButton) cget -text]] >= 0} {
                $w lower Gaussian
                $widget(SkymapGaussianButton) config -text "Show Gaussian"
            } {
                $w raise Gaussian
                $widget(SkymapGaussianButton) config -text "Hide Gaussian"
            }
        }
        togglelocs {
            if {[string first "Hide" [$widget(SkymapLocsButton) cget -text]] >= 0} {
                $w lower locs
                $widget(SkymapLocsButton) config -text "Show Locations"
            } {
                $w raise locs
                $widget(SkymapLocsButton) config -text "Hide Locations"
            }
        }
        togglespike {
            if {[string first "Hide" [$widget(SkymapSpikeButton) cget -text]] >= 0} {
                $w lower Spike
                $widget(SkymapSpikeButton) config -text "Show Spike"
            } {
                $w raise Spike
                $widget(SkymapSpikeButton) config -text "Hide Spike"
            }
        }
        togglepulse {
            if {[string first "Hide" [$widget(SkymapPulseButton) cget -text]] >= 0} {
                $w lower Pulse
                $widget(SkymapPulseButton) config -text "Show Pulse"
            } {
                $w raise Pulse
                $widget(SkymapPulseButton) config -text "Hide Pulse"
            }
        }
        toggletriplet {
            if {[string first "Hide" [$widget(SkymapTripletButton) cget -text]] >= 0} {
                $w lower Triplet
                $widget(SkymapTripletButton) config -text "Show Triplet"
            } {
                $w raise Triplet
                $widget(SkymapTripletButton) config -text "Hide Triplet"
            }
        }
        button2Down {
            # x, y -The coordinates of the mouse press.
            #set seti(lastX) $x
            #set seti(lastY) $y
            $w scan mark $x $y
        }
    }
}

proc {seti_skymapImage} {} {
return { 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
c1ln3tvab6mm3xAAADs=
}
}

proc {seti_skymap_calcXY} {loc xs ys} {
global seti widget
    
    foreach {sra era sdec edec} $loc { break }
    if {$sra > 12} {
        set x [expr {1.5 - $sra / 24.0}]
    } {
        set x [expr {0.5 - $sra / 24.0}]
    }
    set y [expr {1.0 - ($sdec + 90.0)/180.0}]
    set x [expr {$xs * $x}]
    set y [expr {$ys * $y}]
    return "$x $y"
}

proc {seti_testNet} {mode} {
global seti
    set msg "Testing network $mode:"
    if {$seti(_howto_${mode}net) == ""} {
        append msg "\n\nFAILED!\n\nNo script specified."
    } {
        if {[catch {eval exec $seti(_howto_${mode}net)} rep]} {
            append msg "\n\nFAILED! Error returned:\n\n$rep"
        } {
            append msg "\n\nOK!"
            if {$rep != ""} {
                seti_verboseMsg $rep
            }
        }
    }
    tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
}

proc {seti_testProxy} {} {
global seti
    ::http::config -proxyhost $seti(_proxy_host) -proxyport $seti(_proxy_port)
    set host "http://$seti(_proxy_host):$seti(_proxy_port)"
    set msg "Testing proxy host: $host"
    if {[catch {::http::geturl $host} rep]} {
        append msg "\n\nFAILED! Error returned:\n\n$rep"
    } {
        append msg "\n\nOK!"
    }
    tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
}

proc {seti_testStat} {} {
global seti
    set pid [pid]
    set msg "Testing stat command: [subst $seti(_howto_stat)]"
    catch {eval exec $seti(_howto_stat)} ps
    set stat ""
    foreach p [split $ps \n] {
        regsub -all { +} [string trim $p] { } s
        if {[lindex [split $s] $seti(_pid_index)] == $pid} {
            lappend stat $s
            break
        }
    }
    if {[llength $stat] != 1} {
        append msg "\n\nFAILED! First few lines of test results (looking for TkSETI's PID $pid in field $seti(_pid_index)):\n\n[join [lrange [split $ps \n] 0 6] \n\n]"
    } {
        append msg "\n\nOK!"
    }
    tk_dialog .tkseti "Tk-SETI@Home Error" $msg "error" 0 "OK"
}

proc {seti_toggleDisabled} {state wtop disabledfg} {
global seti
    if {[winfo class $wtop] == "Frame"} {
        set children [winfo children $wtop]
    } {
        set children $wtop
    }
    foreach w $children {
        if {[winfo class $w] == "Frame"} {
            seti_toggleDisabled $state $w $disabledfg
            continue
        }
        if {[lsearch -exact "Entry Label Message" [winfo class $w]] >= 0} {
            if {$state == "disabled"} {
                $w config -foreground $disabledfg
            } {
                if {[$w cget -background] != $seti(_ro_entry_bg)} {
                    $w config -foreground black
                } {
                    $w config -foreground $seti(_ro_entry_fg)
                }
            }
        }
        if {[lsearch -exact "Button Checkbutton Entry Radiobutton" [winfo class $w]] >= 0} {
            if {$state == "disabled"} {
                $w config -state disabled
            } {
                if {[$w cget -background] != $seti(_ro_entry_bg)} {
                    $w config -state normal
                }
            }
        }    
    }
}

proc {seti_updateLoad} {} {
global seti widget tcl_platform

    if {$tcl_platform(os) == "Linux"} {
        set new [seti_updateLoadProc]
    } {
        set new [seti_updateLoadClient]
    }

    set seti(cpu_load)  [lrange [concat $seti(cpu_load) $new] 1 end]
    set seti(indicator) [expr [incr seti(indicator)] % 4]

    set w $widget(canvas)
    $w  delete load
    set height [expr $seti(load_height) - 34.0]
    for {set i $seti(load_bd)} {$i < $seti(load_width)} {incr i} {
#puts "line $i [expr 17 + $height * (1.0 - [lindex $seti(cpu_load) $i])] $i [expr 18 + $height] -tags load -fill $seti(_load_graph)" ; flush stdout
        $w create line $i [expr 17 + $height * (1.0 - [lindex $seti(cpu_load) $i])] $i [expr 18 + $height] -tags load -fill $seti(_load_graph)
    }
    $w  raise title
    $widget(canvas) delete title2
#puts "text [expr $seti(load_width) / 2] [expr $seti(load_height) - 8]  -text \"[format %.1f [expr $new * 100.0]]% ([lindex $seti(indicators) $seti(indicator)])\" -anchor center -tags title2 -fill $seti(_load_title)" ; flush stdout
    $widget(canvas) create text [expr $seti(load_width) / 2] [expr $seti(load_height) - 8]  -text "[format "%.1f" [expr $new * 100.0]]% ([lindex $seti(indicators) $seti(indicator)])" -anchor center -tags title2 -fill $seti(_load_title) -font dialogfont
    
    if {$new == 0 || $seti(prog) == 0.0} {
        set seti(cpu_lastload) {}
        $widget(scale) config -label "    Work Unit Progress"
    } {
        if {$seti(cpu_lastload) == ""} {
            set seti(cpu_lastload) $new
        } {
            set seti(cpu_lastload) [concat $seti(cpu_lastload) $new]
            set seti(cpu_lastload) [lrange $seti(cpu_lastload) [expr [llength $seti(cpu_lastload)] - $seti(lastload_width)] end]
        }
        if {$seti(cpu_curr) == ""} {
            set cur 0
        } {
            set cur $seti(cpu)
        }
        set load [eval expr ([join $seti(cpu_lastload) +]) / [llength $seti(cpu_lastload)]]
        if {$load == 0} {
            $widget(scale) config -label "    Work Unit Progress"
        } {
            set eta  [expr ($cur * (1.0 - $seti(prog)) / $seti(prog)) / $load]
#puts "label \"WU Progress ([seti_sec2HMS $eta 2] left)\"" ; flush stdout
            $widget(scale) config -label "WU Progress ([seti_sec2HMS $eta 2] left)"
        }
    }
#puts "END of tkseti trace dump: [clock format [clock seconds]]\n" ; flush stdout
}

proc {seti_updateLoadClient} {} {
global seti widget tcl_platform

    set new  0
    set time [clock seconds]
    if {$seti(lastCPU)} {
        if {$seti(cpu) == $seti(lastCPU)} {
            if {$seti(status) == "running"} {
                set new [lindex $seti(cpu_load) end]
            } {
                set new 0.0
            }
        } {
            set new [expr ($seti(cpu) - $seti(lastCPU)) * 1.0 / $seti(stime_inc)]
            set new [expr ($new < 1.0) ? $new : 1.0]
            if {$seti(status) == "running"} {
                seti_verboseMsg "Client CPU Time (client): $new% ([expr $seti(cpu) - $seti(lastCPU)] cpu over last $seti(stime_inc) seconds)"
            }
            set seti(lastTime) $time
        }
    }
    set seti(lastCPU)   $seti(cpu)
    return $new
}

proc {seti_updateLoadProc} {} {
global seti widget
    set time [clock seconds]
    if {[catch {exec cat /proc/$seti(pid)/stat} l]} {
        return 0
    }
        
    set new 0
    scan $l "%*s %*s %s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %s %s" stat user kernel
    set cpu [expr $user + $kernel]
    seti_verboseMsg "stat=$stat user=$user kernel=$kernel cpu=$cpu"
    if {$seti(lastCPU)} {
        set new [expr ($cpu - $seti(lastCPU)) / 100.0 / ($time - $seti(lastTime))]
        set new [expr ($new < 1.0) ? $new : 1.0]
        if {$seti(status) == "running"} {
            seti_verboseMsg "Client CPU Time (proc): $new%"
        }
    }
    set seti(lastCPU)  $cpu
    set seti(lastTime) $time
    return $new
}

proc {seti_userStats} {opt} {
global seti widget
    set  w $widget(userstats)
    switch $opt {
        get {
            set  seti(users_email_addr) [string trim $seti(users_email_addr)]
            if {$seti(users_email_addr) == ""} {
                return
            }
            set idx [lsearch -exact $seti(_users_list) $seti(users_email_addr)]
            if {$idx < 0} {
                lappend seti(_users_list) $seti(users_email_addr)
                seti_userStats fill
                seti_savePrefs
            }
            set idx [lsearch -exact $seti(_users_list) $seti(users_email_addr)]
            $widget(users_listbox)  selection clear 0 end
            $widget(users_listbox)  selection set $idx
            $widget(users_listbox)  see $idx
            seti_getUserServerStats $seti(users_email_addr)
        }
        fill {
            $widget(users_listbox) delete 0 end
            set  seti(_users_list) [lsort -dictionary $seti(_users_list)]
            eval $widget(users_listbox) insert end $seti(_users_list)
            update idletasks
        }
        hide {
            Window hide $w
        }
        remove {
            set idx [$widget(users_listbox) curselection]
            if {$idx == ""} {
                return
            }
            $widget(users_listbox) delete $idx
            set seti(users_email_addr) ""
            set seti(_users_list) [$widget(users_listbox) get 0 end]
            seti_savePrefs
        }
        set {
            set seti(users_email_addr) [$widget(users_listbox) get [$widget(users_listbox) curselection]]
        }
        show {
            set  seti(users_group)          ""
            set  seti(users_groupurl)       ""
            set  seti(users_name)           ""
            set  seti(users_url)            ""
            set  seti(users_units_received) ""
            set  seti(users_cpu_total)      ""
            set  seti(users_cpu_avg)        ""
            set  seti(users_rank)           ""
            set  seti(users_position)       ""
            set  seti(users_email_addr)     ""
            set  seti(users_last_return)    ""
            set  seti(users_registered_on)  ""
            set  seti(users_user_for)       ""
            Window show $w
            if {[info exists seti(email_addr)]} {
                set user " - $seti(email_addr)"
            } {
                set user ""
            }
            wm title $w "Tk-SETI@Home$user - $seti(_client_name) on [info hostname] - User Stats"
            seti_setColours $w
            seti_userStats fill   
            #seti_setBrowseButtons userurl groupurl  
            $widget(browse_groupurl) config -state disabled
            $widget(browse_userurl)  config -state disabled  
        }
    }
}

proc {seti_verboseMsg} {msg} {
global seti
    if {$seti(_verbose)} {
        puts $msg
    }
}

proc {seti_waitServer} {msg} {
global seti

    if {$msg == ""} {
        if {$seti(server_wcount) <= 0 ||  [incr seti(server_wcount) -[expr $seti(_loop_int) / 1000]] <= 0} {
            return 0
        }
        # Get previous error message
        regsub {; Retrying in .*} $seti(server_str) "" msg
        set msg [string trimleft $msg]
    } {
        set seti(server_wcount) $seti(server_wait)
    }
    set wait [seti_sec2HMS $seti(server_wcount) 2]
    seti_verboseMsg "*** ERROR *** can't open socket to Seti WWW server: $msg"
    seti_verboseMsg "              Retrying in $wait ..."
    #set  seti(units_sent)     ""
    set  seti(units_received) ""
    set  seti(cpu_total)      ""
    set  seti(prev_wtime)     0
    seti_setServerStr pink "$msg; Retrying in $wait ..."
    return 1
}

proc {main} {argc argv} {
global seti widget tcl_platform env
    Window hide $widget(tkseti)
    # Clear the geometry settings so the window resizes
    wm geometry $widget(tkseti) ""
    update idletasks
    Window show $widget(tkseti)
    
    set seti(tksetiURL)     "http://www.cuug.ab.ca/~macdonal/tkseti/tkseti.html"

#    set seti(statefile)     $seti(setidir)/state.txt
#    set seti(workfile)      $seti(setidir)/work_unit.txt
#    set seti(userfile)      $seti(setidir)/user_info.txt
#    set seti(versionfile)   $seti(setidir)/version.txt

    set seti(client_was_notrunning) 0
    set seti(we_stopped_client)  0
    set seti(we_started_network) 0
    set seti(wu_start_time)      0
    set seti(wu_stop_time)       0
    set seti(expected_status)    other
    set seti(server_wait)        3600
    set seti(server_wcount)      0
    set seti(prev_stime)         0
    set seti(prev_wtime)         0
    set seti(prev_pidtime)       0
    set seti(cpu)                0
    set seti(prog)               0
    set seti(bs_power)           0.000000
    set seti(bs_score)           0.000000
    set seti(bg_power)           0.000000
    set seti(bg_score)           0.000000
    set seti(bp_power)           0.000000
    set seti(bp_score)           0.000000
    set seti(bt_power)           0.000000
    set seti(bt_score)           0.000000
    set seti(master_bs_power)    0.000000
    set seti(master_bs_score)    0.000000
    set seti(master_bs_loc)      {0 0 0 0}
    set seti(master_bs_date)     ""
    set seti(master_bg_power)    0.000000
    set seti(master_bg_score)    0.000000
    set seti(master_bg_loc)      {0 0 0 0}
    set seti(master_bg_date)     ""
    set seti(master_bp_power)    0.000000
    set seti(master_bp_score)    0.000000
    set seti(master_bp_loc)      {0 0 0 0}
    set seti(master_bp_date)     ""
    set seti(master_bt_power)    0.000000
    set seti(master_bt_score)    0.000000
    set seti(master_bt_loc)      {0 0 0 0}
    set seti(master_bt_date)     ""
    set seti(my_bs_score)        0.000000
    set seti(my_bs_power)        0.000000
    set seti(my_bs_loc)          {0 0 0 0}
    set seti(my_bs_date)         ""
    set seti(my_bg_score)        0.000000
    set seti(my_bg_power)        0.000000
    set seti(my_bg_loc)          {0 0 0 0}
    set seti(my_bg_date)         ""
    set seti(my_bp_score)        0.000000
    set seti(my_bp_power)        0.000000
    set seti(my_bp_loc)          {0 0 0 0}
    set seti(my_bp_date)         ""
    set seti(my_bt_score)        0.000000
    set seti(my_bt_power)        0.000000
    set seti(my_bt_loc)          {0 0 0 0}
    set seti(my_bt_date)         ""
    set seti(needToSaveLocs)     0

    set seti(_master_dir)          $seti(setidir)
    set seti(_place_recorded)      " Arecibo Radio Observatory"
    set seti(_popup_new_highs)     1
    set seti(_startact_notrunning) 0
    set seti(_startact_paused)     0
    set seti(_start_iconified)     0
    set seti(_iconify_after)       0
    set seti(_restart_dead_client) 0
    set seti(_auto_version_check)  1
    set seti(_last_version_check)  [clock seconds]
    set seti(_newtksetiVersion)    0
    set seti(_exit_action)         nochange
    set seti(_client_name)    {setiathome}
    set seti(_setihost)       {iosef.ssl.berkeley.edu}
    set seti(_howto_run)      {setiathome -email -nice 19}
    set seti(_howto_kill)     {kill -KILL $pid}
    set seti(_howto_pause)    {kill -STOP $pid}
    set seti(_howto_cont)     {kill -CONT $pid}
    set seti(_howto_browse)   {/bin/csh -c "netscape -remote openURL\\\\($url,new-window\\\\) || exec netscape $url"}
    set seti(_howto_statnet)  {}
    set seti(_howto_startnet) {}
    set seti(_howto_stopnet)  {}
    set seti(_wu_start_time)  480
    set seti(_wu_stop_time)   40
    set seti(_proxy_host)     {}
    set seti(_proxy_port)     {}
    set seti(_auto_net_mode)  0
    set seti(_auto_mode)    manual
    set seti(_start_mode)   manual
    set seti(_start_after)  300
    set seti(_stop_mode)    manual
    set seti(_stop_by)      pause
    set seti(_norun_0)      0
    set seti(_norun_1)      0
    set seti(_norun_2)      0
    set seti(_norun_3)      0
    set seti(_norun_4)      0
    set seti(_norun_5)      0
    set seti(_norun_6)      0
    set seti(_norun_mode)   0
    set seti(_norun_stop)   06:00
    set seti(_norun_start)  18:00
    set seti(_nodial_0)      0
    set seti(_nodial_1)      0
    set seti(_nodial_2)      0
    set seti(_nodial_3)      0
    set seti(_nodial_4)      0
    set seti(_nodial_5)      0
    set seti(_nodial_6)      0
    set seti(_nodial_mode)   0
    set seti(_nodial_stop)   06:00
    set seti(_nodial_start)  18:00
    set seti(_usedev_1)      1
    set seti(_usedev_2)      0
    set seti(_usedev_3)      0
    set seti(_usedev_4)      0
    set seti(_usedev_5)      0
    set seti(_usedev_6)      0
    set seti(_device_1)      {1:keyboard}
    set seti(_device_2)      ""
    set seti(_device_3)      ""
    set seti(_device_4)      ""
    set seti(_device_5)      ""
    set seti(_device_6)      ""
    set seti(_deviceThreshold_1) 0
    set seti(_deviceThreshold_2) 0
    set seti(_deviceThreshold_3) 0
    set seti(_deviceThreshold_4) 0
    set seti(_deviceThreshold_5) 0
    set seti(_deviceThreshold_6) 0
    set seti(_users_list)   ""
    set seti(_verbose)      0
    #set seti(_ro_entry_bg)  "green"
    #set seti(_ro_entry_fg)  "black"
    #set seti(_prog_trough)  "blue"
    #set seti(_load_graph)   "blue"
    #set seti(_load_title)   "black"
    #set seti(_note_tabs)    "green"
    set seti(_load_graph)   {#8659ef}
    set seti(_load_title)   {black}
    set seti(_note_tabs)    {#00ce9e}
    set seti(_prog_trough)  {#8659ef}
    set seti(_ro_entry_bg)  {#00ce9e}
    set seti(_ro_entry_fg)  {black}

    set seti(_notfied_user_unknown_high_loc) 0

    set seti(haveProc)      0
    switch -regexp $tcl_platform(os) {
        FreeBSD {
            set seti(_howto_stat)   {ps xp $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps ax}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    0
            set seti(_status_index) 2
        }
        HP-UX {
            set seti(_howto_stat)   {ps -lfp $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps -elf}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    3
            set seti(_status_index) 1
        }
        IRIX.* {
            set seti(_howto_stat)   {ps -lfp $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps -elf}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    3
            set seti(_status_index) 1
        }
        Linux {
            set seti(_howto_stat)   {ps x $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps ax}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    0
            set seti(_status_index) 2
            set seti(haveProc)      1
        }
        SCO.* {
            set seti(_howto_stat)   {ps -lfp $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps -elf}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    3
            set seti(_status_index) 1
        }
        solaris -
        SunOS {
            set seti(_howto_stat)   {ps -lfp $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps -elf}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    3
            set seti(_status_index) 1
        }
        UnixWare {
            set seti(_howto_stat)   {ps -lfp $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps -elf}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    3
            set seti(_status_index) 1
        }
        default {
            set seti(_howto_stat)   {ps x $pid}
            if {$seti(client_version) < 2} {
                set seti(_howto_stat) {ps ax}
            }
            set seti(_pause_flags)  {T}
            set seti(_pid_index)    0
            set seti(_status_index) 2
        }
    }

    # TTD: put these into the Setup dialog? (time intervals are 1000's of seconds)
    set seti(_loop_int)        10000
    set seti(_sanity_loop_int) 600000
    
    set seti(loop_intv)    [expr $seti(_loop_int) / 1000]

    catch {source $seti(setidir)/.tksetirc}

    catch {set seti(_master_dir) [glob $seti(_master_dir)]}
    
    if {[info exists ::vTcl]} {
        # TkSETI isn't meant to be runable within vTcl
        return
    }

    if {[info exists env(HTTP_PROXY)]} {
        foreach {seti(_proxy_host) seti(_proxy_port)} [split $env(HTTP_PROXY) :] { break }
    }
    
    wm protocol $widget(tkseti) WM_DELETE_WINDOW "seti_exit"
    
    if {[array names seti _my_*] != ""} {
        # This is to move old top score variables to the new variables and the master "highs" file.
        foreach oldvar [array names seti _my_*] {
            set newvar [string range $oldvar 1 end]
            set   seti($newvar) $seti($oldvar)
            unset seti($oldvar)
            # Fix up old format locs.
            if {[string first "," $seti($newvar)] >= 0} {
                set seti($newvar) [split $seti($newvar) ,]
            }
        }
        seti_savePrefs
    }
    
    catch {source $seti(_master_dir)/.tksetimasterhighs}

    seti_setBrowseButtons tksetiHome setiHome
    
#    seti_getClientVersion

    wm iconname $widget(tkseti) "TkSETI"
    ###wm iconbitmap $widget(tkseti) icon

    cd $seti(setidir)

    set seti(setup_sections)  {general helpers automodes}
    set seti(setup_startuptab) general
    set seti(setup_prevtab)    ""
    if {[seti_setupCheck quiet]} {
        update idletasks
        seti_setup runcheck
    }
    
    seti_setModeStr
    seti_setServerStr yellow ""
    seti_setColours $widget(tkseti)
    seti_setFonts
 
    if {!$seti(haveHttp)} {
        seti_setServerStr   pink  "*** Tcl http package not found *** Server stats not available ***"
        #set  seti(units_sent)     " * Stats not available *"
        #set  seti(units_received) " * Stats not available *"
        #set  seti(cpu_total)      " * Stats not available *"
        #set  seti(cpu_avg)        " * Stats not available *"
    }
    
    seti_getVals   $seti(userfile)
    set seti(user) [lindex [split $seti(email_addr) @] 0]
    set seti(addr) [lindex [split $seti(email_addr) @] 1]

    seti_setTitle

    seti_setStatus
 
    seti_doStartupAction
    
    set lastactivity   [clock seconds]
    set seti(lastTime) [clock seconds]
    set seti(ndevices) [llength [array names seti _usedev_*]]
    
    seti_getIdleness 1

    set seti(loopTime)   0
    set seti(lastCPU)    0
    set seti(indicators) {- \\ | /}
    set seti(indicator)  0
    set seti(stime_inc)  [expr $seti(_loop_int) / 1000]

    update idletasks 

    set seti(load_bd)     [$widget(canvas) cget -borderwidth]
    set seti(load_width)  [expr 1.0 * [winfo width  $widget(canvas)] - $seti(load_bd)]
    set seti(load_height) [expr 1.0 * [winfo height $widget(canvas)] - $seti(load_bd)]
    set seti(cpu_load)    0
    for {set i 0} {$i < $seti(load_width)} {incr i} {
        lappend seti(cpu_load) 0
    }
    $widget(canvas) create text [expr $seti(load_width) / 2] 10  -anchor center -tags "title text"  -text "Client CPU Usage" -fill $seti(_load_title) -font dialogfont
    $widget(canvas) create text [expr $seti(load_width) / 2] [expr $seti(load_height) - 8]  -anchor center -tags "title2 text" -text "" -fill $seti(_load_title)
    
    set seti(lastload_width) 3
    set seti(cpu_lastload)   {}
 
    if {$seti(_start_iconified)} {
        after [expr $seti(_iconify_after) * 1000] Window iconify $widget(tkseti)
    }

    set seti(first_loop_flag) 1
    set check_flag 0
    while {1} {

        if {$seti(status) == "running" || $check_flag == 0} {
            # seti_getWorkUnitStatus will optionally run the network start script.
            if {[seti_getWorkUnitStatus] > 0} {
                # There is a new or existing work unit. Check state file for progress.
                # seti_getStateFileStatus will optionally run the network stop script.
                seti_getStateFileStatus
            }
            set check_flag 1
        }
        
        seti_updateLoad

        if {$seti(status) == "running"} {
            set check_flag 2
            set seti(we_stopped_client) 0
            # Client is running.
            # Check to see if we're in a NO-RUN time period, and stop the client if we are.
            if {$seti(_norun_mode)} {
                set day   [clock format [clock seconds] -format "%w"]
                if {$seti(_norun_$day)} {
                    set time  [clock seconds]
                    set stop  [clock scan $seti(_norun_stop)]
                    set start [clock scan $seti(_norun_start)]
                    if {$time > $stop && $time < $start} {
                        seti_verboseMsg "time to stop ($seti(_stop_by)); no-run time period"
                        seti_actions $seti(_stop_by)
                        set seti(we_stopped_client) 1
                    }
                }
            }
            # Check to see if device activity is configured to stop the client.
            # no-run mode may have stopped it already
            if {$seti(_auto_mode) == "auto" && $seti(_stop_mode) == "auto" && $seti(status) == "running"} {
                if {![seti_getIdleness]} {
                    set lastactivity [clock seconds]
                    seti_verboseMsg "time to stop ($seti(_stop_by)); device activity"
                    seti_actions $seti(_stop_by)
                    set seti(we_stopped_client) 1
                }
            }
        } elseif {$seti(status) != "error"} {
            # Client is notrunning or paused
            if {$check_flag == 2} {
                # Client was running, but now it's not. Force one more WorkUnitStatus check.
                set check_flag 0
            }
            if {$seti(status) == "notrunning"} {
                set mode "run"
            } {
                set mode "continue"
            }
            set str      ""
            set msg      ""
            set action   ""
            set try_auto 1
            # If a NO-RUN period is configured, check to see if we're still in that time period or not.
            if {$seti(_norun_mode)} {
                set day [clock format [clock seconds] -format "%w"]
                if {$seti(_norun_$day)} {
                    set time  [clock seconds]
                    set stop  [clock scan $seti(_norun_stop)]
                    set start [clock scan $seti(_norun_start)]
                    if {$time < $stop || $time > $start} {
                        # We're no longer in the NO-RUN time period. Restart client.
                        #TTD: this will also restart after a manual stop (oh, well...)
                        set msg      "time to $mode; no-run time period expired"
                        set action   $mode
                        set seti(we_stopped_client) 0
                    } {
                        # We're in a no-run period; don't even look at the auto start mode that follows.
                        set try_auto 0
                        set left     [expr int(($start - $time + $seti(loop_intv) - 1)/$seti(loop_intv)) * $seti(loop_intv)]
                        set str      "; [seti_sec2HMS $left 2] left in no-run period"
                        set seti(we_stopped_client) 1
                    }
                }
            }
            # If we're not in a NO-RUN time period (try_auto != 0), check device idleness for client restart.
            if {$try_auto && $seti(_auto_mode) == "auto" && $seti(_start_mode) == "auto"} {
                set left [expr $seti(_start_after) - ([clock seconds] - $lastactivity)]
                if {[seti_getIdleness]} {
                    if {[expr [clock seconds] - $lastactivity] >= $seti(_start_after)} {
                        set str      ""
                        set msg      "time to $mode; devices idle"
                        set action   $mode
                        set seti(we_stopped_client) 0
                    } {
                        set left     [expr int(($left + $seti(loop_intv) - 1)/$seti(loop_intv)) * $seti(loop_intv)]
                        set str      "; [seti_sec2HMS $left 2] before idle device auto $mode"
                        set msg      ""
                        set action   ""
                        set seti(we_stopped_client) 1
                    }
                } {
                    set str      "; devices not idle - will not auto $mode"
                    set msg      ""
                    set action   ""
                    set lastactivity [clock seconds]
                    set seti(we_stopped_client) 1
                }
            }
            if {$action != ""} {
                seti_actions $action
            }
            if {$msg != ""} {
                seti_verboseMsg $msg
            }
            if {$str != ""} {
                append seti(status_str) $str
            }
        }

        after $seti(_loop_int) {set setiloop 1}
        tkwait variable setiloop

        incr seti(loopTime)   $seti(_loop_int)
        if {$seti(loopTime) < $seti(_sanity_loop_int)} {
            set force ""
        } {
            # Sanity check #1...
            set seti(loopTime) 0
            set force force
        }
        seti_setStatus $force

        # Sanity check #2...
        if {$seti(_restart_dead_client) &&  $seti(status) == "notrunning" && $seti(expected_status) == "running"} {
            seti_verboseMsg "Client not running when expected - restarting..."
            seti_actions run
        }
        set seti(first_loop_flag) 0
    }
}

proc {Window} {args} {
global vTcl
    set cmd [lindex $args 0]
    set name [lindex $args 1]
    set newname [lindex $args 2]
    set rest [lrange $args 3 end]
    if {$name == "" || $cmd == ""} {return}
    if {$newname == ""} {
        set newname $name
    }
    set exists [winfo exists $newname]
    switch $cmd {
        show {
            if {$exists == "1" && $name != "."} {wm deiconify $name; return}
            if {[info procs vTclWindow(pre)$name] != ""} {
                eval "vTclWindow(pre)$name $newname $rest"
            }
            if {[info procs vTclWindow$name] != ""} {
                eval "vTclWindow$name $newname $rest"
            }
            if {[info procs vTclWindow(post)$name] != ""} {
                eval "vTclWindow(post)$name $newname $rest"
            }
        }
        hide    { if $exists {wm withdraw $newname; return} }
        iconify { if $exists {wm iconify $newname; return} }
        destroy { if $exists {destroy $newname; return} }
    }
}

#################################
# VTCL GENERATED GUI PROCEDURES
#

proc vTclWindow. {base} {
    if {$base == ""} {
        set base .
    }
    ###################
    # CREATING WIDGETS
    ###################
    wm focusmodel $base passive
    wm geometry $base 1x1+0+0
    wm maxsize $base 1137 870
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm withdraw $base
    wm title $base "vt.tcl"
    ###################
    # SETTING GEOMETRY
    ###################
}

proc vTclWindow.top17 {base} {
    if {$base == ""} {
        set base .top17
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel \
        -background black -highlightbackground black 
    wm focusmodel $base passive
    wm geometry $base 740x577+150+147
    wm maxsize $base 1137 870
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm deiconify $base
    wm title $base "Tk-SETI@Home Monitor v3.03"
    frame $base.fra18 \
        -background black -height 75 -highlightbackground grey85 -width 147 
    frame $base.fra18.fra19 \
        -background grey85 -height 75 -highlightbackground grey85 -width 125 
    label $base.fra18.fra19.l1 \
        -background #AE00B200C300 -borderwidth 0 -font dialogfont \
        -foreground #000000000000 -highlightbackground grey85 -image seti 
    frame $base.fra18.fra18 \
        -background black -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra18.fra18.fra19 \
        -background black -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra18.fra18.fra19.fra24 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra19.fra24.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text Source -width 17 
    entry $base.fra18.fra18.fra19.fra24.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(_place_recorded) \
        -width 27 
    frame $base.fra18.fra18.fra19.fra26 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra19.fra26.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Recorded On} \
        -width 17 
    entry $base.fra18.fra18.fra19.fra26.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(time_recorded_fmt) \
        -width 25 
    frame $base.fra18.fra18.fra19.013 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra19.013.014 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Current CPU Time} \
        -width 17 
    entry $base.fra18.fra18.fra19.013.015 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(cpu_curr) -width 25 
    frame $base.fra18.fra18.fra19.fra28 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra19.fra28.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Current Spike   } \
        -width 17 
    entry $base.fra18.fra18.fra19.fra28.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(curr_bs_power) \
        -width 25 
    frame $base.fra18.fra18.fra19.fra32 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra19.fra32.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Current Gaussian} \
        -width 17 
    entry $base.fra18.fra18.fra19.fra32.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(curr_bg_score) \
        -width 25 
    frame $base.fra18.fra18.fra19.fra19 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra19.fra19.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Current Pulse   } \
        -width 17 
    entry $base.fra18.fra18.fra19.fra19.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(curr_bp_score) \
        -width 25 
    frame $base.fra18.fra18.fra19.fra20 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra19.fra20.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Current Triplet } \
        -width 17 
    entry $base.fra18.fra18.fra19.fra20.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(curr_bt_score) \
        -width 25 
    scale $base.fra18.fra18.fra19.016 \
        -background grey85 -font dialogfont -foreground #000000000000 \
        -highlightbackground grey85 -highlightthickness 0 \
        -label {    Work Unit Progress} -length 160 \
        -orient horizontal -relief ridge -resolution 0.001 -sliderlength 10 \
        -state disabled -troughcolor blue -variable seti(cpu_pcnt) -width 30 
    canvas $base.fra18.fra18.fra19.017 \
        -background grey85 -borderwidth 2 -height 36 \
        -highlightbackground grey85 -highlightthickness 0 -relief ridge \
        -width 127 
    frame $base.fra18.fra18.fra20 \
        -background black -height 75 -highlightbackground grey85 -width 147 
    frame $base.fra18.fra18.fra20.fra27 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.fra27.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Units Processed} \
        -width 17 
    entry $base.fra18.fra18.fra20.fra27.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(units_received) \
        -width 27 
    frame $base.fra18.fra18.fra20.fra29 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.fra29.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Total   CPU Time} \
        -width 17 
    entry $base.fra18.fra18.fra20.fra29.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(cpu_total) \
        -width 25 
    frame $base.fra18.fra18.fra20.fra33 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.fra33.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Average CPU Time} \
        -width 17 
    entry $base.fra18.fra18.fra20.fra33.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(cpu_avg) -width 25 
    frame $base.fra18.fra18.fra20.01 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.01.02 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Your Top Spike} \
        -width 17 
    entry $base.fra18.fra18.fra20.01.03 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bs_power) \
        -width 25 
    frame $base.fra18.fra18.fra20.04 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.04.05 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -justify left -relief groove \
        -text {Date Found} -width 17 
    entry $base.fra18.fra18.fra20.04.06 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bs_date) \
        -width 25 
    frame $base.fra18.fra18.fra20.07 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.07.08 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Your Top Gaussian} \
        -width 17 
    entry $base.fra18.fra18.fra20.07.09 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bg_score) \
        -width 25 
    frame $base.fra18.fra18.fra20.010 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.010.011 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Date Found} \
        -width 17 
    entry $base.fra18.fra18.fra20.010.012 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bg_date) \
        -width 25 
    frame $base.fra18.fra18.fra20.fra24 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.fra24.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Your Top Pulse} \
        -width 17 
    entry $base.fra18.fra18.fra20.fra24.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bp_score) \
        -width 25 
    frame $base.fra18.fra18.fra20.fra21 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.fra21.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Date Found} \
        -width 17 
    entry $base.fra18.fra18.fra20.fra21.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bp_date) \
        -width 25 
    frame $base.fra18.fra18.fra20.fra25 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.fra25.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Your Top Triplet} \
        -width 17 
    entry $base.fra18.fra18.fra20.fra25.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bt_score) \
        -width 25 
    frame $base.fra18.fra18.fra20.fra23 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra18.fra20.fra23.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text {Date Found} \
        -width 17 
    entry $base.fra18.fra18.fra20.fra23.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(new_bt_date) \
        -width 25 
    frame $base.fra18.fra18.fra17 \
        -background black -borderwidth 2 -height 75 \
        -highlightbackground grey85 -width 12 
    frame $base.fra18.fra29 \
        -background black -height 75 -highlightbackground black -width 125 
    frame $base.fra18.fra29.01 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra29.01.02 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text Mode -width 7 
    entry $base.fra18.fra29.01.03 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(mode_str) -width 80 
    frame $base.fra18.fra17 \
        -background black -height 75 -highlightbackground black -width 125 
    frame $base.fra18.fra17.01 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra17.01.02 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text Server -width 7 
    entry $base.fra18.fra17.01.03 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(server_str) \
        -width 80 
    frame $base.fra18.fra22 \
        -background black -height 75 -highlightbackground black -width 125 
    frame $base.fra18.fra22.fra23 \
        -background grey85 -borderwidth 1 -height 30 \
        -highlightbackground grey85 -relief raised -width 30 
    label $base.fra18.fra22.fra23.01 \
        -background grey85 -font dialogfont -foreground black \
        -highlightbackground grey85 -relief groove -text Client -width 7 
    entry $base.fra18.fra22.fra23.02 \
        -background green -cursor {} -exportselection 0 -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -state disabled -textvariable seti(status_str) \
        -width 12 
    button $base.fra18.fra22.but28 \
        -background grey85 -command {set seti(interrupt_getClientStatus) 1} \
        -font dialogfont -foreground black -highlightbackground grey85 \
        -highlightthickness 0 -padx 11 -pady 3 -text {Cancel Status Check} \
        -width 19 
    frame $base.fra18.fra33 \
        -background black -height 75 -highlightbackground black -width 125 
    button $base.fra18.fra33.but34 \
        -background grey85 -command {seti_setStatus force} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text {Refresh Client Status} -width 19 
    button $base.fra18.fra33.07 \
        -background grey85 -command {seti_actions continue} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Continue -width 10 
    button $base.fra18.fra33.06 \
        -background grey85 -command {seti_actions pause} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Pause -width 10 
    button $base.fra18.fra33.05 \
        -background grey85 -command {seti_actions kill} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Kill -width 10 
    button $base.fra18.fra33.04 \
        -background grey85 -command {seti_actions run} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Run -width 10 
    frame $base.fra18.fra21 \
        -background black -height 75 -highlightbackground black -width 125 
    button $base.fra18.fra21.but37 \
        -background grey85 -command {seti_help show} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Help -width 6 
    button $base.fra18.fra21.but35 \
        -background grey85 \
        -command {seti_launchBrowser http://$seti(_setihost)} \
        -font dialogfont -foreground black -highlightbackground grey85 \
        -highlightthickness 0 -padx 11 -pady 4 -text {SETI@Home Web Page} 
    button $base.fra18.fra21.but19 \
        -background grey85 -command {seti_launchBrowser $seti(tksetiURL)} \
        -font dialogfont -foreground black -highlightbackground grey85 \
        -highlightthickness 0 -padx 11 -pady 4 -text {TkSETI Web Page} 
    button $base.fra18.fra21.but20 \
        -background grey85 -command {seti_skymap show} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Map -width 6 
    button $base.fra18.fra21.but36 \
        -background grey85 -command {seti_userStats show} -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Stats -width 6 
    button $base.fra18.fra21.but17 \
        -background grey85 -command seti_setup -font dialogfont \
        -foreground black -highlightbackground grey85 -highlightthickness 0 \
        -padx 11 -pady 4 -text Setup -width 6 
    button $base.fra18.fra21.but18 \
        -background grey85 -command seti_exit -font dialogfont \
        -foreground #000000000000 -highlightbackground black \
        -highlightthickness 0 -padx 11 -pady 4 -text Quit -width 6 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.fra18 \
        -in .top17 -anchor center -expand 1 -fill x -padx 34 -side top 
    pack $base.fra18.fra19 \
        -in .top17.fra18 -anchor center -expand 1 -fill none -pady 10 \
        -side top 
    pack $base.fra18.fra19.l1 \
        -in .top17.fra18.fra19 -anchor center -expand 1 -fill none -side top 
    pack $base.fra18.fra18 \
        -in .top17.fra18 -anchor center -expand 0 -fill x -pady 10 -side top 
    pack $base.fra18.fra18.fra19 \
        -in .top17.fra18.fra18 -anchor e -expand 1 -fill y -side right 
    pack $base.fra18.fra18.fra19.fra24 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra19.fra24.01 \
        -in .top17.fra18.fra18.fra19.fra24 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra19.fra24.02 \
        -in .top17.fra18.fra18.fra19.fra24 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra19.fra26 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra19.fra26.01 \
        -in .top17.fra18.fra18.fra19.fra26 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra19.fra26.02 \
        -in .top17.fra18.fra18.fra19.fra26 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra19.013 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra19.013.014 \
        -in .top17.fra18.fra18.fra19.013 -anchor center -expand 0 -fill none \
        -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra19.013.015 \
        -in .top17.fra18.fra18.fra19.013 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra19.fra28 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra19.fra28.01 \
        -in .top17.fra18.fra18.fra19.fra28 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra19.fra28.02 \
        -in .top17.fra18.fra18.fra19.fra28 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra19.fra32 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra19.fra32.01 \
        -in .top17.fra18.fra18.fra19.fra32 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra19.fra32.02 \
        -in .top17.fra18.fra18.fra19.fra32 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra19.fra19 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra19.fra19.01 \
        -in .top17.fra18.fra18.fra19.fra19 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra19.fra19.02 \
        -in .top17.fra18.fra18.fra19.fra19 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra19.fra20 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra19.fra20.01 \
        -in .top17.fra18.fra18.fra19.fra20 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra19.fra20.02 \
        -in .top17.fra18.fra18.fra19.fra20 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra19.016 \
        -in .top17.fra18.fra18.fra19 -anchor e -expand 1 -fill both \
        -side right 
    pack $base.fra18.fra18.fra19.017 \
        -in .top17.fra18.fra18.fra19 -anchor center -expand 0 -fill both \
        -side right 
    pack $base.fra18.fra18.fra20 \
        -in .top17.fra18.fra18 -anchor w -expand 1 -fill y -side left 
    pack $base.fra18.fra18.fra20.fra27 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.fra27.01 \
        -in .top17.fra18.fra18.fra20.fra27 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.fra27.02 \
        -in .top17.fra18.fra18.fra20.fra27 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.fra29 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.fra29.01 \
        -in .top17.fra18.fra18.fra20.fra29 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.fra29.02 \
        -in .top17.fra18.fra18.fra20.fra29 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.fra33 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.fra33.01 \
        -in .top17.fra18.fra18.fra20.fra33 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.fra33.02 \
        -in .top17.fra18.fra18.fra20.fra33 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.01 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.01.02 \
        -in .top17.fra18.fra18.fra20.01 -anchor center -expand 0 -fill none \
        -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.01.03 \
        -in .top17.fra18.fra18.fra20.01 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.04 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.04.05 \
        -in .top17.fra18.fra18.fra20.04 -anchor center -expand 0 -fill none \
        -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.04.06 \
        -in .top17.fra18.fra18.fra20.04 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.07 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.07.08 \
        -in .top17.fra18.fra18.fra20.07 -anchor center -expand 0 -fill none \
        -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.07.09 \
        -in .top17.fra18.fra18.fra20.07 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.010 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.010.011 \
        -in .top17.fra18.fra18.fra20.010 -anchor center -expand 0 -fill none \
        -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.010.012 \
        -in .top17.fra18.fra18.fra20.010 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.fra24 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.fra24.01 \
        -in .top17.fra18.fra18.fra20.fra24 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.fra24.02 \
        -in .top17.fra18.fra18.fra20.fra24 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.fra21 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.fra21.01 \
        -in .top17.fra18.fra18.fra20.fra21 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.fra21.02 \
        -in .top17.fra18.fra18.fra20.fra21 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.fra25 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.fra25.01 \
        -in .top17.fra18.fra18.fra20.fra25 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.fra25.02 \
        -in .top17.fra18.fra18.fra20.fra25 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra20.fra23 \
        -in .top17.fra18.fra18.fra20 -anchor center -expand 0 -fill x \
        -side top 
    pack $base.fra18.fra18.fra20.fra23.01 \
        -in .top17.fra18.fra18.fra20.fra23 -anchor center -expand 0 \
        -fill none -padx 2 -pady 2 -side left 
    pack $base.fra18.fra18.fra20.fra23.02 \
        -in .top17.fra18.fra18.fra20.fra23 -anchor center -expand 1 -fill x \
        -padx 2 -pady 2 -side right 
    pack $base.fra18.fra18.fra17 \
        -in .top17.fra18.fra18 -anchor center -expand 0 -fill none -side left 
    pack $base.fra18.fra29 \
        -in .top17.fra18 -anchor center -expand 0 -fill x -side top 
    pack $base.fra18.fra29.01 \
        -in .top17.fra18.fra29 -anchor center -expand 1 -fill x -side left 
    pack $base.fra18.fra29.01.02 \
        -in .top17.fra18.fra29.01 -anchor center -expand 0 -fill none -padx 2 \
        -pady 2 -side left 
    pack $base.fra18.fra29.01.03 \
        -in .top17.fra18.fra29.01 -anchor center -expand 1 -fill x -padx 2 \
        -pady 2 -side right 
    pack $base.fra18.fra17 \
        -in .top17.fra18 -anchor center -expand 0 -fill x -side top 
    pack $base.fra18.fra17.01 \
        -in .top17.fra18.fra17 -anchor center -expand 1 -fill x -side left 
    pack $base.fra18.fra17.01.02 \
        -in .top17.fra18.fra17.01 -anchor center -expand 0 -fill none -padx 2 \
        -pady 2 -side left 
    pack $base.fra18.fra17.01.03 \
        -in .top17.fra18.fra17.01 -anchor center -expand 1 -fill x -padx 2 \
        -pady 2 -side right 
    pack $base.fra18.fra22 \
        -in .top17.fra18 -anchor center -expand 1 -fill x -side top 
    pack $base.fra18.fra22.fra23 \
        -in .top17.fra18.fra22 -anchor center -expand 1 -fill x -side left 
    pack $base.fra18.fra22.fra23.01 \
        -in .top17.fra18.fra22.fra23 -anchor center -expand 0 -fill none \
        -padx 2 -pady 2 -side left 
    pack $base.fra18.fra22.fra23.02 \
        -in .top17.fra18.fra22.fra23 -anchor center -expand 1 -fill x -padx 2 \
        -pady 2 -side right 
    pack $base.fra18.fra22.but28 \
        -in .top17.fra18.fra22 -anchor e -expand 0 -fill none -side left 
    pack $base.fra18.fra33 \
        -in .top17.fra18 -anchor center -expand 0 -fill x -side top 
    pack $base.fra18.fra33.but34 \
        -in .top17.fra18.fra33 -anchor w -expand 0 -fill none -side right 
    pack $base.fra18.fra33.07 \
        -in .top17.fra18.fra33 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra33.06 \
        -in .top17.fra18.fra33 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra33.05 \
        -in .top17.fra18.fra33 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra33.04 \
        -in .top17.fra18.fra33 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra21 \
        -in .top17.fra18 -anchor center -expand 1 -fill x -ipady 30 -side top 
    pack $base.fra18.fra21.but37 \
        -in .top17.fra18.fra21 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra21.but35 \
        -in .top17.fra18.fra21 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra21.but19 \
        -in .top17.fra18.fra21 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra21.but20 \
        -in .top17.fra18.fra21 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra21.but36 \
        -in .top17.fra18.fra21 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra21.but17 \
        -in .top17.fra18.fra21 -anchor w -expand 1 -fill x -side right 
    pack $base.fra18.fra21.but18 \
        -in .top17.fra18.fra21 -anchor w -expand 1 -fill x -side right 
}

proc vTclWindow.top18 {base} {
    if {$base == ""} {
        set base .top18
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 803x963+61+0
    wm maxsize $base 1600 1600
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - Setup"
    frame $base.fra68  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra68.01  -background grey85 -command {set seti(setup_done) 1} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 11 -pady 4 -takefocus 0 -text Close -width 10 
    button $base.fra68.but18  -background grey85 -command {seti_help show} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 11 -pady 4 -takefocus 0 -text Help -width 10 
    frame $base.fra23  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief sunken -width 125 
    radiobutton $base.fra23.rad25  -background grey85 -command seti_setupTabsChange -font headingfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -indicatoron 0 -selectcolor blue -takefocus 0 -text {General Setup}  -value general -variable seti(setup_tab) 
    radiobutton $base.fra23.rad26  -background grey85 -command seti_setupTabsChange -font headingfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -indicatoron 0 -selectcolor blue -takefocus 0  -text {Helper Applications} -value helpers -variable seti(setup_tab) 
    radiobutton $base.fra23.rad27  -background grey85 -command seti_setupTabsChange -font headingfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -indicatoron 0 -selectcolor blue -takefocus 0 -text {Auto Modes}  -value automodes -variable seti(setup_tab) 
    frame $base.fra22  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    frame $base.fra22.fra24  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra22.fra24.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text MasterDirectory  -width 15 
    entry $base.fra22.fra24.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_master_dir)  -width 10 
    frame $base.fra22.fra23  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra22.fra23.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -justify right -relief groove  -text {Tk-SETI Startup} -width 15 
    checkbutton $base.fra22.fra23.che24  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {run client if it's not running}  -variable seti(_startact_notrunning) 
    checkbutton $base.fra22.fra23.che25  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {continue client if it's paused}  -variable seti(_startact_paused) 
    checkbutton $base.fra22.fra23.che29  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {iconify after} -variable seti(_start_iconified) 
    entry $base.fra22.fra23.ent28  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_iconify_after)  -width 6 
    frame $base.fra22.fra26  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra22.fra26.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -justify right -relief groove  -text {Tk-SETI Exit} -width 15 
    radiobutton $base.fra22.fra26.rad27  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {don't change client state} -value nochange  -variable seti(_exit_action) 
    radiobutton $base.fra22.fra26.rad28  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {kill running client} -value kill -variable seti(_exit_action) 
    radiobutton $base.fra22.fra26.rad29  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {pause running client} -value pause  -variable seti(_exit_action) 
    radiobutton $base.fra22.fra26.rad30  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -takefocus 0 -text {ask me} -value ask -variable seti(_exit_action) 
    frame $base.fra22.fra25  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra22.fra25.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -justify right -relief groove  -text {Tk-SETI Version} -width 15 
    checkbutton $base.fra22.fra25.02  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {Check periodically for new Tk-SETI version}  -variable seti(_auto_version_check) 
    frame $base.fra22.fra27  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra22.fra27.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -justify right -relief groove  -text {PopUp Windows} -width 15 
    checkbutton $base.fra22.fra27.02  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {PopUp notify windows for high Spikes, Gaussians, Pulses and Triplets}  -variable seti(_popup_new_highs) 
    frame $base.fra22.fra18  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra22.fra18.lab19  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -justify right -relief groove  -text {Dead Client} -width 15 
    checkbutton $base.fra22.fra18.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {Restart client if it dies unexpectedly}  -variable seti(_restart_dead_client) 
    frame $base.fra22.fra20  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra22.fra20.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -justify right -relief groove  -text {Verbose / Debug} -width 15 
    checkbutton $base.fra22.fra20.02  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -takefocus 0  -text {Verbose and debug print to stdout} -variable seti(_verbose) 
    frame $base.fra22.fra17  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra22.fra17.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Text Background}  -width 15 
    entry $base.fra22.fra17.05  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_ro_entry_bg)  -width 8 
    button $base.fra22.fra17.but18  -background grey85 -borderwidth 1  -command {seti_chooseColour show _ro_entry_bg} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra22.fra17.02  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra22.fra17.02.03  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Text Foreground}  -width 15 
    entry $base.fra22.fra17.02.04  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_ro_entry_fg)  -width 8 
    button $base.fra22.fra17.but17  -background grey85 -borderwidth 1  -command {seti_chooseColour show _ro_entry_fg} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra22.fra19  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra22.fra19.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {CPU Usage Graph}  -width 15 
    entry $base.fra22.fra19.07  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_load_graph)  -width 8 
    button $base.fra22.fra19.06  -background grey85 -borderwidth 1  -command {seti_chooseColour show _load_graph} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra22.fra19.03  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra22.fra19.03.04  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {CPU Usage Title}  -width 15 
    entry $base.fra22.fra19.03.05  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_load_title)  -width 8 
    button $base.fra22.fra19.02  -background grey85 -borderwidth 1  -command {seti_chooseColour show _load_title} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra22.fra21  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra22.fra21.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Progress Scale}  -width 15 
    entry $base.fra22.fra21.07  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_prog_trough)  -width 8 
    button $base.fra22.fra21.06  -background grey85 -borderwidth 1  -command {seti_chooseColour show _prog_trough} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra22.fra21.fra35  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra22.fra21.fra35.01  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Setup Note Tabs}  -width 15 
    entry $base.fra22.fra21.fra35.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_note_tabs)  -width 8 
    button $base.fra22.fra21.but36  -background grey85 -borderwidth 1  -command {seti_chooseColour show _note_tabs} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra22.fra22  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra22.fra22.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Dialog Font}  -width 15 
    entry $base.fra22.fra22.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_DialogFont)  -width 8 
    button $base.fra22.fra22.03  -background grey85 -borderwidth 1  -command {seti_chooseFont DialogFont} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra22.fra22.04  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra22.fra22.04.05  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Heading Font}  -width 15 
    entry $base.fra22.fra22.04.06  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_HeadingFont)  -width 8 
    button $base.fra22.fra22.07  -background grey85 -borderwidth 1  -command {seti_chooseFont HeadingFont} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra66  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    frame $base.fra66.fra21  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.fra21.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Client Name}  -width 15 
    entry $base.fra66.fra21.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_client_name)  -width 10 
    frame $base.fra66.fra32  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.fra32.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {How to Run}  -width 15 
    entry $base.fra66.fra32.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_run)  -width 10 
    frame $base.fra66.04  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.04.05  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {How to Pause}  -width 15 
    entry $base.fra66.04.06  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_pause)  
    frame $base.fra66.04.fra17  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra66.04.fra17.01  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Pause Flags}  -width 15 
    entry $base.fra66.04.fra17.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_pause_flags)  -width 11 
    frame $base.fra66.07  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.07.08  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {How to Continue}  -width 15 
    entry $base.fra66.07.09  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_cont)  
    frame $base.fra66.fra34  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.fra34.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {How to Kill}  -width 15 
    entry $base.fra66.fra34.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_kill)  
    frame $base.fra66.fra28  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.fra28.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {How to Stat}  -width 15 
    entry $base.fra66.fra28.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_stat)  
    frame $base.fra66.fra28.cpd31  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra66.fra28.cpd31.01  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove  -text {STAT String PID Index} 
    entry $base.fra66.fra28.cpd31.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_pid_index)  -width 3 
    frame $base.fra66.fra28.fra32  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra66.fra28.fra32.01  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Status Index} 
    entry $base.fra66.fra28.fra32.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_status_index)  -width 3 
    button $base.fra66.fra28.but17  -background grey85 -borderwidth 1 -command seti_testStat  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -takefocus 0 -text {Test Stat}  -width 10 
    frame $base.fra66.fra33  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.fra33.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Web Browser}  -width 15 
    entry $base.fra66.fra33.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_browse)  
    frame $base.fra66.fra18  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    button $base.fra66.fra18.but19  -background grey85 -borderwidth 1 -command seti_testProxy  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -takefocus 0 -text {Test Proxy}  -width 10 
    label $base.fra66.fra18.07  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Proxy Server}  -width 15 
    entry $base.fra66.fra18.08  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_proxy_host)  -width 3 
    frame $base.fra66.fra18.04  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra66.fra18.04.05  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Proxy Port} 
    entry $base.fra66.fra18.04.06  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_proxy_port)  -width 6 
    frame $base.fra66.fra17  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra66.fra17.01  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {SETI host}  -width 15 
    entry $base.fra66.fra17.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_setihost)  
    frame $base.fra28  -background grey85 -borderwidth 2 -height 110  -highlightbackground grey85 -relief groove -width 125 
    frame $base.fra28.fra29  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief ridge -width 125 
    checkbutton $base.fra28.fra29.01  -anchor w -background grey85 -borderwidth 1 -command seti_setMode  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -takefocus 0  -text {Do Not Run during day / time window: }  -variable seti(_norun_mode) 
    frame $base.fra28.fra29.02  -background grey85 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra29.02.03  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Su -variable seti(_norun_0) 
    checkbutton $base.fra28.fra29.02.04  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Mo -variable seti(_norun_1) 
    checkbutton $base.fra28.fra29.02.05  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Tu -variable seti(_norun_2) 
    checkbutton $base.fra28.fra29.02.06  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text We -variable seti(_norun_3) 
    checkbutton $base.fra28.fra29.02.07  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Th -variable seti(_norun_4) 
    checkbutton $base.fra28.fra29.02.08  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Fr -variable seti(_norun_5) 
    checkbutton $base.fra28.fra29.02.09  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Sa -variable seti(_norun_6) 
    frame $base.fra28.fra29.02.010  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra28.fra29.02.010.011  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text Begin 
    entry $base.fra28.fra29.02.010.012  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_norun_stop)  -width 5 
    frame $base.fra28.fra29.02.013  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra28.fra29.02.013.014  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text End -width 5 
    entry $base.fra28.fra29.02.013.015  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_norun_start)  -width 5 
    frame $base.fra28.fra30  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    checkbutton $base.fra28.fra30.01  -anchor w -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -offvalue manual -onvalue auto -relief ridge -takefocus 0  -text {Monitor System Devices for Automatic Client Start / Stop (Linux Only)}  -variable seti(_auto_mode) 
    frame $base.fra28.fra30.02  -background grey85 -borderwidth 2 -height 4  -highlightbackground grey85 -width 125 
    frame $base.fra28.fra30.03  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra28.fra30.03.04  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra28.fra30.03.04.05  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -justify right -relief groove  -text {Auto Mode Uses} -width 15 
    radiobutton $base.fra28.fra30.03.04.06  -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text pausing -value pause -variable seti(_stop_by) 
    radiobutton $base.fra28.fra30.03.04.07  -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text killing -value kill -variable seti(_stop_by) 
    frame $base.fra28.fra30.03.08  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra28.fra30.03.08.09  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Start Client}  -textvariable seti(client_start_label) -width 15 
    radiobutton $base.fra28.fra30.03.08.010  -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text manually -value manual -variable seti(_start_mode) 
    radiobutton $base.fra28.fra30.03.08.011  -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text automatically -value auto  -variable seti(_start_mode) 
    frame $base.fra28.fra30.03.08.012  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    label $base.fra28.fra30.03.08.012.013  -anchor w -background gray85 -borderwidth 0 -font dialogfont  -foreground black -highlightbackground grey85 -justify right  -text after 
    entry $base.fra28.fra30.03.08.012.014  -background white -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_start_after)  -width 5 
    label $base.fra28.fra30.03.08.012.015  -background gray85 -borderwidth 1 -font dialogfont -foreground black  -highlightbackground grey85  -text {seconds of idleness of selected devices} 
    frame $base.fra28.fra30.03.016  -background grey85 -borderwidth 1 -height 76  -highlightbackground grey85 -relief raised -width 125 
    label $base.fra28.fra30.03.016.017  -anchor w -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Stop  Client}  -textvariable seti(client_stop_label) -width 15 
    radiobutton $base.fra28.fra30.03.016.018  -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text manually -value manual -variable seti(_stop_mode) 
    radiobutton $base.fra28.fra30.03.016.019  -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0  -text {automatically (when selected device activity is detected)}  -value auto -variable seti(_stop_mode) 
    frame $base.fra28.fra30.03.020  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra28.fra30.03.020.021  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra28.fra30.03.020.021.022  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra30.03.020.021.022.023  -background grey85 -borderwidth 1 -command {seti_chooseDevice use 1}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 2 -pady 5 -relief raised -takefocus 0  -variable seti(_usedev_1) 
    frame $base.fra28.fra30.03.020.021.022.024  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.021.022.024.025  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Dev 1} 
    entry $base.fra28.fra30.03.020.021.022.024.026  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(_device_1)   -width 16 
    frame $base.fra28.fra30.03.020.021.022.fra18  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.021.022.fra18.01  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -text Thresh 
    entry $base.fra28.fra30.03.020.021.022.fra18.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_deviceThreshold_1)  -width 7 
    button $base.fra28.fra30.03.020.021.022.027  -background grey85 -borderwidth 1  -command {seti_chooseDevice choose 1} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra28.fra30.03.020.021.028  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra30.03.020.021.028.029  -background grey85 -borderwidth 1 -command {seti_chooseDevice use 2}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 2 -pady 5 -relief raised -takefocus 0  -variable seti(_usedev_2) 
    frame $base.fra28.fra30.03.020.021.028.030  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.021.028.030.031  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Dev 2} 
    entry $base.fra28.fra30.03.020.021.028.030.032  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(_device_2)   -width 16 
    frame $base.fra28.fra30.03.020.021.028.fra19  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.021.028.fra19.01  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -text Thresh 
    entry $base.fra28.fra30.03.020.021.028.fra19.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_deviceThreshold_2)  -width 7 
    button $base.fra28.fra30.03.020.021.028.033  -background grey85 -borderwidth 1  -command {seti_chooseDevice choose 2} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra28.fra30.03.020.021.034  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra30.03.020.021.034.035  -background grey85 -borderwidth 1 -command {seti_chooseDevice use 3}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 2 -pady 5 -relief raised -takefocus 0  -variable seti(_usedev_3) 
    frame $base.fra28.fra30.03.020.021.034.036  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.021.034.036.037  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Dev 3} 
    entry $base.fra28.fra30.03.020.021.034.036.038  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(_device_3)   -width 16 
    frame $base.fra28.fra30.03.020.021.034.fra20  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.021.034.fra20.01  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -text Thresh 
    entry $base.fra28.fra30.03.020.021.034.fra20.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_deviceThreshold_3)  -width 7 
    button $base.fra28.fra30.03.020.021.034.039  -background grey85 -borderwidth 1  -command {seti_chooseDevice choose 3} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra28.fra30.03.020.040  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra28.fra30.03.020.040.041  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra30.03.020.040.041.042  -background grey85 -borderwidth 1 -command {seti_chooseDevice use 4}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 2 -pady 5 -relief raised -takefocus 0  -variable seti(_usedev_4) 
    frame $base.fra28.fra30.03.020.040.041.043  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.040.041.043.044  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Dev 4} 
    entry $base.fra28.fra30.03.020.040.041.043.045  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(_device_4)   -width 16 
    frame $base.fra28.fra30.03.020.040.041.fra21  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.040.041.fra21.01  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -text Thresh 
    entry $base.fra28.fra30.03.020.040.041.fra21.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_deviceThreshold_4)  -width 7 
    button $base.fra28.fra30.03.020.040.041.046  -background grey85 -borderwidth 1  -command {seti_chooseDevice choose 4} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra28.fra30.03.020.040.047  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra30.03.020.040.047.048  -background grey85 -borderwidth 1 -command {seti_chooseDevice use 5}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 2 -pady 5 -relief raised -takefocus 0  -variable seti(_usedev_5) 
    frame $base.fra28.fra30.03.020.040.047.049  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.040.047.049.050  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Dev 5} 
    entry $base.fra28.fra30.03.020.040.047.049.051  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(_device_5)   -width 16 
    frame $base.fra28.fra30.03.020.040.047.fra22  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.040.047.fra22.01  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -text Thresh 
    entry $base.fra28.fra30.03.020.040.047.fra22.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_deviceThreshold_5)  -width 7 
    button $base.fra28.fra30.03.020.040.047.052  -background grey85 -borderwidth 1  -command {seti_chooseDevice choose 5} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra28.fra30.03.020.040.053  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra30.03.020.040.053.054  -background grey85 -borderwidth 1 -command {seti_chooseDevice use 6}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 2 -pady 5 -relief raised -takefocus 0  -variable seti(_usedev_6) 
    frame $base.fra28.fra30.03.020.040.053.055  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.040.053.055.056  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Dev 6} 
    entry $base.fra28.fra30.03.020.040.053.055.057  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(_device_6)   -width 16 
    frame $base.fra28.fra30.03.020.040.053.fra23  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra28.fra30.03.020.040.053.fra23.01  -background gray85 -font dialogfont -foreground black  -highlightbackground grey85 -text Thresh 
    entry $base.fra28.fra30.03.020.040.053.fra23.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_deviceThreshold_6)  -width 7 
    button $base.fra28.fra30.03.020.040.053.058  -background grey85 -borderwidth 1  -command {seti_chooseDevice choose 6} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -takefocus 0 -text Choose... 
    frame $base.fra28.fra31  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    checkbutton $base.fra28.fra31.01  -anchor w -background grey85 -command seti_setMode -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -relief ridge -takefocus 0  -text {Run Network Start / Stop Scripts when client requires server contact}  -variable seti(_auto_net_mode) 
    frame $base.fra28.fra31.02  -background grey85 -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra28.fra31.02.03  -background grey85 -borderwidth 2 -height 4  -highlightbackground grey85 -width 125 
    frame $base.fra28.fra31.02.04  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    frame $base.fra28.fra31.02.04.012  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra28.fra31.02.04.012.013  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {How to Start Net} 
    button $base.fra28.fra31.02.04.012.014  -background grey85 -borderwidth 1 -command {seti_testNet start}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -takefocus 0 -text Test  -width 6 
    entry $base.fra28.fra31.02.04.012.018  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_startnet)  -width 3 
    frame $base.fra28.fra31.02.04.012.015  -background grey85 -height 30 -highlightbackground grey85 -width 30 
    label $base.fra28.fra31.02.04.012.015.016  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text After 
    entry $base.fra28.fra31.02.04.012.015.017  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_wu_start_time)  -width 5 
    frame $base.fra28.fra31.02.04.05  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra28.fra31.02.04.05.06  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {How To Stop Net} 
    button $base.fra28.fra31.02.04.05.07  -background grey85 -borderwidth 1 -command {seti_testNet stop}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -takefocus 0 -text Test  -width 6 
    entry $base.fra28.fra31.02.04.05.011  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_howto_stopnet)  -width 3 
    frame $base.fra28.fra31.02.04.05.08  -background grey85 -height 30 -highlightbackground grey85 -width 30 
    label $base.fra28.fra31.02.04.05.08.09  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text After 
    entry $base.fra28.fra31.02.04.05.08.010  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_wu_stop_time)  -width 5 
    frame $base.fra28.fra31.02.019  -background grey85 -borderwidth 1 -height 75  -highlightbackground grey85 -relief raised -width 125 
    checkbutton $base.fra28.fra31.02.019.020  -anchor w -background grey85 -borderwidth 1 -command seti_setMode  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -takefocus 0  -text {Do Not Dial during day / time window: }  -variable seti(_nodial_mode) 
    frame $base.fra28.fra31.02.019.021  -background grey85 -highlightbackground grey85 -width 125 
    checkbutton $base.fra28.fra31.02.019.021.022  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Su -variable seti(_nodial_0) 
    checkbutton $base.fra28.fra31.02.019.021.023  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Mo -variable seti(_nodial_1) 
    checkbutton $base.fra28.fra31.02.019.021.024  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Tu -variable seti(_nodial_2) 
    checkbutton $base.fra28.fra31.02.019.021.025  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text We -variable seti(_nodial_3) 
    checkbutton $base.fra28.fra31.02.019.021.026  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Th -variable seti(_nodial_4) 
    checkbutton $base.fra28.fra31.02.019.021.027  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Fr -variable seti(_nodial_5) 
    checkbutton $base.fra28.fra31.02.019.021.028  -anchor w -background grey85 -borderwidth 1 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -takefocus 0 -text Sa -variable seti(_nodial_6) 
    frame $base.fra28.fra31.02.019.021.029  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra28.fra31.02.019.021.029.030  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text Begin 
    entry $base.fra28.fra31.02.019.021.029.031  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_nodial_stop)  -width 5 
    frame $base.fra28.fra31.02.019.021.032  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -width 30 
    label $base.fra28.fra31.02.019.021.032.033  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text End -width 5 
    entry $base.fra28.fra31.02.019.021.032.034  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(_nodial_start)  -width 5 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.fra68  -in .top18 -anchor center -expand 0 -fill x -pady 2 -side bottom 
    pack $base.fra68.01  -in .top18.fra68 -anchor e -expand 1 -fill none -padx 20 -side left 
    pack $base.fra68.but18  -in .top18.fra68 -anchor w -expand 1 -fill none -padx 20 -side right 
    pack $base.fra23  -in .top18 -anchor center -expand 0 -fill x -pady 10 -side top 
    pack $base.fra23.rad25  -in .top18.fra23 -anchor center -expand 1 -fill x -ipady 10  -side left 
    pack $base.fra23.rad26  -in .top18.fra23 -anchor center -expand 1 -fill x -ipady 10  -side left 
    pack $base.fra23.rad27  -in .top18.fra23 -anchor center -expand 1 -fill x -ipady 10  -side left 
    pack $base.fra22  -in .top18 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra22.fra24  -in .top18.fra22 -anchor center -expand 1 -fill x -side top 
    pack $base.fra22.fra24.01  -in .top18.fra22.fra24 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra24.02  -in .top18.fra22.fra24 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra22.fra23  -in .top18.fra22 -anchor center -expand 0 -fill x -side top 
    pack $base.fra22.fra23.01  -in .top18.fra22.fra23 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra23.che24  -in .top18.fra22.fra23 -anchor center -expand 0 -fill none -side left 
    pack $base.fra22.fra23.che25  -in .top18.fra22.fra23 -anchor center -expand 0 -fill none -ipadx 7  -side left 
    pack $base.fra22.fra23.che29  -in .top18.fra22.fra23 -anchor center -expand 0 -fill none -ipadx 7  -side left 
    pack $base.fra22.fra23.ent28  -in .top18.fra22.fra23 -anchor center -expand 0 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra22.fra26  -in .top18.fra22 -anchor center -expand 0 -fill x -side top 
    pack $base.fra22.fra26.01  -in .top18.fra22.fra26 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra26.rad27  -in .top18.fra22.fra26 -anchor center -expand 0 -fill none -side left 
    pack $base.fra22.fra26.rad28  -in .top18.fra22.fra26 -anchor center -expand 0 -fill none -padx 7  -side left 
    pack $base.fra22.fra26.rad29  -in .top18.fra22.fra26 -anchor center -expand 0 -fill none -side left 
    pack $base.fra22.fra26.rad30  -in .top18.fra22.fra26 -anchor center -expand 0 -fill none -padx 7  -side left 
    pack $base.fra22.fra25  -in .top18.fra22 -anchor center -expand 0 -fill x -side top 
    pack $base.fra22.fra25.01  -in .top18.fra22.fra25 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra25.02  -in .top18.fra22.fra25 -anchor center -expand 0 -fill none -side left 
    pack $base.fra22.fra27  -in .top18.fra22 -anchor center -expand 0 -fill x -side top 
    pack $base.fra22.fra27.01  -in .top18.fra22.fra27 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra27.02  -in .top18.fra22.fra27 -anchor center -expand 0 -fill none -side left 
    pack $base.fra22.fra18  -in .top18.fra22 -anchor center -expand 0 -fill x -side top 
    pack $base.fra22.fra18.lab19  -in .top18.fra22.fra18 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra18.01  -in .top18.fra22.fra18 -anchor center -expand 0 -fill none -side left 
    pack $base.fra22.fra20  -in .top18.fra22 -anchor center -expand 0 -fill x -side top 
    pack $base.fra22.fra20.01  -in .top18.fra22.fra20 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra20.02  -in .top18.fra22.fra20 -anchor center -expand 0 -fill none -side left 
    pack $base.fra22.fra17  -in .top18.fra22 -anchor center -expand 1 -fill x -side top 
    pack $base.fra22.fra17.01  -in .top18.fra22.fra17 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra17.05  -in .top18.fra22.fra17 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra22.fra17.but18  -in .top18.fra22.fra17 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra22.fra17.02  -in .top18.fra22.fra17 -anchor center -expand 1 -fill x -side left 
    pack $base.fra22.fra17.02.03  -in .top18.fra22.fra17.02 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra17.02.04  -in .top18.fra22.fra17.02 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra22.fra17.but17  -in .top18.fra22.fra17 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra22.fra19  -in .top18.fra22 -anchor center -expand 1 -fill x -side top 
    pack $base.fra22.fra19.01  -in .top18.fra22.fra19 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra19.07  -in .top18.fra22.fra19 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra22.fra19.06  -in .top18.fra22.fra19 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra22.fra19.03  -in .top18.fra22.fra19 -anchor center -expand 1 -fill x -side left 
    pack $base.fra22.fra19.03.04  -in .top18.fra22.fra19.03 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra19.03.05  -in .top18.fra22.fra19.03 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra22.fra19.02  -in .top18.fra22.fra19 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra22.fra21  -in .top18.fra22 -anchor center -expand 1 -fill x -side top 
    pack $base.fra22.fra21.01  -in .top18.fra22.fra21 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra21.07  -in .top18.fra22.fra21 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra22.fra21.06  -in .top18.fra22.fra21 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra22.fra21.fra35  -in .top18.fra22.fra21 -anchor center -expand 1 -fill x -side left 
    pack $base.fra22.fra21.fra35.01  -in .top18.fra22.fra21.fra35 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra22.fra21.fra35.02  -in .top18.fra22.fra21.fra35 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra22.fra21.but36  -in .top18.fra22.fra21 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra22.fra22  -in .top18.fra22 -anchor center -expand 1 -fill x -side top 
    pack $base.fra22.fra22.01  -in .top18.fra22.fra22 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra22.02  -in .top18.fra22.fra22 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra22.fra22.03  -in .top18.fra22.fra22 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra22.fra22.04  -in .top18.fra22.fra22 -anchor center -expand 1 -fill x -side left 
    pack $base.fra22.fra22.04.05  -in .top18.fra22.fra22.04 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra22.fra22.04.06  -in .top18.fra22.fra22.04 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra22.fra22.07  -in .top18.fra22.fra22 -anchor center -expand 0 -fill none -ipady 1  -side left 
    pack $base.fra66  -in .top18 -anchor center -expand 0 -fill x -side top 
    pack $base.fra66.fra21  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.fra21.01  -in .top18.fra66.fra21 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra21.02  -in .top18.fra66.fra21 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra66.fra32  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.fra32.01  -in .top18.fra66.fra32 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra32.02  -in .top18.fra66.fra32 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra66.04  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.04.05  -in .top18.fra66.04 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.04.06  -in .top18.fra66.04 -anchor center -expand 1 -fill x -padx 2 -pady 2  -side left 
    pack $base.fra66.04.fra17  -in .top18.fra66.04 -anchor center -expand 0 -fill x -side left 
    pack $base.fra66.04.fra17.01  -in .top18.fra66.04.fra17 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.04.fra17.02  -in .top18.fra66.04.fra17 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.07  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.07.08  -in .top18.fra66.07 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.07.09  -in .top18.fra66.07 -anchor center -expand 1 -fill x -padx 2 -pady 2  -side right 
    pack $base.fra66.fra34  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.fra34.01  -in .top18.fra66.fra34 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra34.02  -in .top18.fra66.fra34 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra66.fra28  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.fra28.01  -in .top18.fra66.fra28 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra28.02  -in .top18.fra66.fra28 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra66.fra28.cpd31  -in .top18.fra66.fra28 -anchor center -expand 0 -fill none -side left 
    pack $base.fra66.fra28.cpd31.01  -in .top18.fra66.fra28.cpd31 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra66.fra28.cpd31.02  -in .top18.fra66.fra28.cpd31 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra66.fra28.fra32  -in .top18.fra66.fra28 -anchor center -expand 0 -fill none -side left 
    pack $base.fra66.fra28.fra32.01  -in .top18.fra66.fra28.fra32 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra66.fra28.fra32.02  -in .top18.fra66.fra28.fra32 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra66.fra28.but17  -in .top18.fra66.fra28 -anchor center -expand 0 -fill none -ipady 1  -side right 
    pack $base.fra66.fra33  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.fra33.01  -in .top18.fra66.fra33 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra33.02  -in .top18.fra66.fra33 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra66.fra18  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.fra18.but19  -in .top18.fra66.fra18 -anchor center -expand 0 -fill none -ipady 1  -side right 
    pack $base.fra66.fra18.07  -in .top18.fra66.fra18 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra18.08  -in .top18.fra66.fra18 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side left 
    pack $base.fra66.fra18.04  -in .top18.fra66.fra18 -anchor center -expand 0 -fill x -side left 
    pack $base.fra66.fra18.04.05  -in .top18.fra66.fra18.04 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra18.04.06  -in .top18.fra66.fra18.04 -anchor center -expand 0 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra66.fra17  -in .top18.fra66 -anchor center -expand 1 -fill x -side top 
    pack $base.fra66.fra17.01  -in .top18.fra66.fra17 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra66.fra17.02  -in .top18.fra66.fra17 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra28  -in .top18 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra29  -in .top18.fra28 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra28.fra29.01  -in .top18.fra28.fra29 -anchor w -expand 0 -fill x -ipady 4  -side left 
    pack $base.fra28.fra29.02  -in .top18.fra28.fra29 -anchor center -expand 1 -fill both -padx 4  -side left 
    pack $base.fra28.fra29.02.03  -in .top18.fra28.fra29.02 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra29.02.04  -in .top18.fra28.fra29.02 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra29.02.05  -in .top18.fra28.fra29.02 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra29.02.06  -in .top18.fra28.fra29.02 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra29.02.07  -in .top18.fra28.fra29.02 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra29.02.08  -in .top18.fra28.fra29.02 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra29.02.09  -in .top18.fra28.fra29.02 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra29.02.010  -in .top18.fra28.fra29.02 -anchor center -expand 0 -fill x -side left 
    pack $base.fra28.fra29.02.010.011  -in .top18.fra28.fra29.02.010 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra29.02.010.012  -in .top18.fra28.fra29.02.010 -anchor center -expand 1 -fill none  -padx 2 -pady 2 -side right 
    pack $base.fra28.fra29.02.013  -in .top18.fra28.fra29.02 -anchor center -expand 0 -fill x -side left 
    pack $base.fra28.fra29.02.013.014  -in .top18.fra28.fra29.02.013 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra29.02.013.015  -in .top18.fra28.fra29.02.013 -anchor center -expand 1 -fill x  -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30  -in .top18.fra28 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra30.01  -in .top18.fra28.fra30 -anchor w -expand 0 -fill x -ipady 4 -side top 
    pack $base.fra28.fra30.02  -in .top18.fra28.fra30 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra30.03  -in .top18.fra28.fra30 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra30.03.04  -in .top18.fra28.fra30.03 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra30.03.04.05  -in .top18.fra28.fra30.03.04 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.04.06  -in .top18.fra28.fra30.03.04 -anchor center -expand 0 -fill none  -padx 2 -side left 
    pack $base.fra28.fra30.03.04.07  -in .top18.fra28.fra30.03.04 -anchor center -expand 0 -fill none  -padx 7 -side left 
    pack $base.fra28.fra30.03.08  -in .top18.fra28.fra30.03 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra30.03.08.09  -in .top18.fra28.fra30.03.08 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.08.010  -in .top18.fra28.fra30.03.08 -anchor center -expand 0 -fill none  -padx 2 -side left 
    pack $base.fra28.fra30.03.08.011  -in .top18.fra28.fra30.03.08 -anchor center -expand 0 -fill none  -side left 
    pack $base.fra28.fra30.03.08.012  -in .top18.fra28.fra30.03.08 -anchor center -expand 0 -fill x  -side left 
    pack $base.fra28.fra30.03.08.012.013  -in .top18.fra28.fra30.03.08.012 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.08.012.014  -in .top18.fra28.fra30.03.08.012 -anchor center -expand 0 -fill none  -padx 2 -side left 
    pack $base.fra28.fra30.03.08.012.015  -in .top18.fra28.fra30.03.08.012 -anchor center -expand 0 -fill none  -padx 2 -side left 
    pack $base.fra28.fra30.03.016  -in .top18.fra28.fra30.03 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra30.03.016.017  -in .top18.fra28.fra30.03.016 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.016.018  -in .top18.fra28.fra30.03.016 -anchor center -expand 0 -fill none  -padx 2 -side left 
    pack $base.fra28.fra30.03.016.019  -in .top18.fra28.fra30.03.016 -anchor center -expand 0 -fill none  -side left 
    pack $base.fra28.fra30.03.020  -in .top18.fra28.fra30.03 -anchor center -expand 1 -fill x -side top 
    pack $base.fra28.fra30.03.020.021  -in .top18.fra28.fra30.03.020 -anchor sw -expand 1 -fill x -side left 
    pack $base.fra28.fra30.03.020.021.022  -in .top18.fra28.fra30.03.020.021 -anchor center -expand 0 -fill x  -side top 
    pack $base.fra28.fra30.03.020.021.022.023  -in .top18.fra28.fra30.03.020.021.022 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.021.022.024  -in .top18.fra28.fra30.03.020.021.022 -anchor center -expand 1  -fill x -side left 
    pack $base.fra28.fra30.03.020.021.022.024.025  -in .top18.fra28.fra30.03.020.021.022.024 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.021.022.024.026  -in .top18.fra28.fra30.03.020.021.022.024 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.021.022.fra18  -in .top18.fra28.fra30.03.020.021.022 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.021.022.fra18.01  -in .top18.fra28.fra30.03.020.021.022.fra18 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.021.022.fra18.02  -in .top18.fra28.fra30.03.020.021.022.fra18 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.021.022.027  -in .top18.fra28.fra30.03.020.021.022 -anchor center -expand 0  -fill none -ipady 1 -side left 
    pack $base.fra28.fra30.03.020.021.028  -in .top18.fra28.fra30.03.020.021 -anchor center -expand 1 -fill x  -side top 
    pack $base.fra28.fra30.03.020.021.028.029  -in .top18.fra28.fra30.03.020.021.028 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.021.028.030  -in .top18.fra28.fra30.03.020.021.028 -anchor center -expand 1  -fill x -side left 
    pack $base.fra28.fra30.03.020.021.028.030.031  -in .top18.fra28.fra30.03.020.021.028.030 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.021.028.030.032  -in .top18.fra28.fra30.03.020.021.028.030 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.021.028.fra19  -in .top18.fra28.fra30.03.020.021.028 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.021.028.fra19.01  -in .top18.fra28.fra30.03.020.021.028.fra19 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.021.028.fra19.02  -in .top18.fra28.fra30.03.020.021.028.fra19 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.021.028.033  -in .top18.fra28.fra30.03.020.021.028 -anchor center -expand 0  -fill none -ipady 1 -side left 
    pack $base.fra28.fra30.03.020.021.034  -in .top18.fra28.fra30.03.020.021 -anchor center -expand 0 -fill x  -side top 
    pack $base.fra28.fra30.03.020.021.034.035  -in .top18.fra28.fra30.03.020.021.034 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.021.034.036  -in .top18.fra28.fra30.03.020.021.034 -anchor center -expand 1  -fill x -side left 
    pack $base.fra28.fra30.03.020.021.034.036.037  -in .top18.fra28.fra30.03.020.021.034.036 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.021.034.036.038  -in .top18.fra28.fra30.03.020.021.034.036 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.021.034.fra20  -in .top18.fra28.fra30.03.020.021.034 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.021.034.fra20.01  -in .top18.fra28.fra30.03.020.021.034.fra20 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.021.034.fra20.02  -in .top18.fra28.fra30.03.020.021.034.fra20 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.021.034.039  -in .top18.fra28.fra30.03.020.021.034 -anchor center -expand 0  -fill none -ipady 1 -side left 
    pack $base.fra28.fra30.03.020.040  -in .top18.fra28.fra30.03.020 -anchor sw -expand 1 -fill x -side left 
    pack $base.fra28.fra30.03.020.040.041  -in .top18.fra28.fra30.03.020.040 -anchor center -expand 0 -fill x  -side top 
    pack $base.fra28.fra30.03.020.040.041.042  -in .top18.fra28.fra30.03.020.040.041 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.040.041.043  -in .top18.fra28.fra30.03.020.040.041 -anchor center -expand 1  -fill x -side left 
    pack $base.fra28.fra30.03.020.040.041.043.044  -in .top18.fra28.fra30.03.020.040.041.043 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.040.041.043.045  -in .top18.fra28.fra30.03.020.040.041.043 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.040.041.fra21  -in .top18.fra28.fra30.03.020.040.041 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.040.041.fra21.01  -in .top18.fra28.fra30.03.020.040.041.fra21 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.040.041.fra21.02  -in .top18.fra28.fra30.03.020.040.041.fra21 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.040.041.046  -in .top18.fra28.fra30.03.020.040.041 -anchor center -expand 0  -fill none -ipady 1 -side left 
    pack $base.fra28.fra30.03.020.040.047  -in .top18.fra28.fra30.03.020.040 -anchor center -expand 1 -fill x  -side top 
    pack $base.fra28.fra30.03.020.040.047.048  -in .top18.fra28.fra30.03.020.040.047 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.040.047.049  -in .top18.fra28.fra30.03.020.040.047 -anchor center -expand 1  -fill x -side left 
    pack $base.fra28.fra30.03.020.040.047.049.050  -in .top18.fra28.fra30.03.020.040.047.049 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.040.047.049.051  -in .top18.fra28.fra30.03.020.040.047.049 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.040.047.fra22  -in .top18.fra28.fra30.03.020.040.047 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.040.047.fra22.01  -in .top18.fra28.fra30.03.020.040.047.fra22 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.040.047.fra22.02  -in .top18.fra28.fra30.03.020.040.047.fra22 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.040.047.052  -in .top18.fra28.fra30.03.020.040.047 -anchor center -expand 0  -fill none -ipady 1 -side left 
    pack $base.fra28.fra30.03.020.040.053  -in .top18.fra28.fra30.03.020.040 -anchor center -expand 0 -fill x  -side top 
    pack $base.fra28.fra30.03.020.040.053.054  -in .top18.fra28.fra30.03.020.040.053 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.040.053.055  -in .top18.fra28.fra30.03.020.040.053 -anchor center -expand 1  -fill x -side left 
    pack $base.fra28.fra30.03.020.040.053.055.056  -in .top18.fra28.fra30.03.020.040.053.055 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.040.053.055.057  -in .top18.fra28.fra30.03.020.040.053.055 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.040.053.fra23  -in .top18.fra28.fra30.03.020.040.053 -anchor center -expand 0  -fill none -side left 
    pack $base.fra28.fra30.03.020.040.053.fra23.01  -in .top18.fra28.fra30.03.020.040.053.fra23 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra30.03.020.040.053.fra23.02  -in .top18.fra28.fra30.03.020.040.053.fra23 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side right 
    pack $base.fra28.fra30.03.020.040.053.058  -in .top18.fra28.fra30.03.020.040.053 -anchor center -expand 0  -fill none -ipady 1 -side left 
    pack $base.fra28.fra31  -in .top18.fra28 -anchor center -expand 0 -fill x -pady 6 -side top 
    pack $base.fra28.fra31.01  -in .top18.fra28.fra31 -anchor w -expand 0 -fill x -ipady 4 -side top 
    pack $base.fra28.fra31.02  -in .top18.fra28.fra31 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra31.02.03  -in .top18.fra28.fra31.02 -anchor center -expand 1 -fill x -side top 
    pack $base.fra28.fra31.02.04  -in .top18.fra28.fra31.02 -anchor center -expand 1 -fill x -side top 
    pack $base.fra28.fra31.02.04.012  -in .top18.fra28.fra31.02.04 -anchor center -expand 1 -fill x  -side left 
    pack $base.fra28.fra31.02.04.012.013  -in .top18.fra28.fra31.02.04.012 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.04.012.014  -in .top18.fra28.fra31.02.04.012 -anchor center -expand 0 -fill none  -ipady 1 -side right 
    pack $base.fra28.fra31.02.04.012.018  -in .top18.fra28.fra31.02.04.012 -anchor center -expand 1 -fill x  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.04.012.015  -in .top18.fra28.fra31.02.04.012 -anchor center -expand 0 -fill none  -padx 4 -side left 
    pack $base.fra28.fra31.02.04.012.015.016  -in .top18.fra28.fra31.02.04.012.015 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.04.012.015.017  -in .top18.fra28.fra31.02.04.012.015 -anchor center -expand 1 -fill x  -padx 2 -pady 2 -side right 
    pack $base.fra28.fra31.02.04.05  -in .top18.fra28.fra31.02.04 -anchor center -expand 1 -fill x  -side left 
    pack $base.fra28.fra31.02.04.05.06  -in .top18.fra28.fra31.02.04.05 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.04.05.07  -in .top18.fra28.fra31.02.04.05 -anchor center -expand 0 -fill none  -ipady 1 -side right 
    pack $base.fra28.fra31.02.04.05.011  -in .top18.fra28.fra31.02.04.05 -anchor center -expand 1 -fill x  -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.04.05.08  -in .top18.fra28.fra31.02.04.05 -anchor center -expand 0 -fill none  -padx 4 -side left 
    pack $base.fra28.fra31.02.04.05.08.09  -in .top18.fra28.fra31.02.04.05.08 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.04.05.08.010  -in .top18.fra28.fra31.02.04.05.08 -anchor center -expand 1 -fill x  -padx 2 -pady 2 -side right 
    pack $base.fra28.fra31.02.019  -in .top18.fra28.fra31.02 -anchor center -expand 0 -fill x -side top 
    pack $base.fra28.fra31.02.019.020  -in .top18.fra28.fra31.02.019 -anchor w -expand 0 -fill x -ipady 4  -side left 
    pack $base.fra28.fra31.02.019.021  -in .top18.fra28.fra31.02.019 -anchor center -expand 1 -fill both  -padx 4 -side left 
    pack $base.fra28.fra31.02.019.021.022  -in .top18.fra28.fra31.02.019.021 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra31.02.019.021.023  -in .top18.fra28.fra31.02.019.021 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra31.02.019.021.024  -in .top18.fra28.fra31.02.019.021 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra31.02.019.021.025  -in .top18.fra28.fra31.02.019.021 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra31.02.019.021.026  -in .top18.fra28.fra31.02.019.021 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra31.02.019.021.027  -in .top18.fra28.fra31.02.019.021 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra31.02.019.021.028  -in .top18.fra28.fra31.02.019.021 -anchor w -expand 0 -fill x -padx 2  -side left 
    pack $base.fra28.fra31.02.019.021.029  -in .top18.fra28.fra31.02.019.021 -anchor center -expand 0 -fill x  -side left 
    pack $base.fra28.fra31.02.019.021.029.030  -in .top18.fra28.fra31.02.019.021.029 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.019.021.029.031  -in .top18.fra28.fra31.02.019.021.029 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right 
    pack $base.fra28.fra31.02.019.021.032  -in .top18.fra28.fra31.02.019.021 -anchor center -expand 0 -fill x  -side left 
    pack $base.fra28.fra31.02.019.021.032.033  -in .top18.fra28.fra31.02.019.021.032 -anchor center -expand 0  -fill none -padx 2 -pady 2 -side left 
    pack $base.fra28.fra31.02.019.021.032.034  -in .top18.fra28.fra31.02.019.021.032 -anchor center -expand 1  -fill x -padx 2 -pady 2 -side right
}

proc vTclWindow.top19 {base} {
    if {$base == ""} {
        set base .top19
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 481x646+365+117
    wm maxsize $base 1137 834
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - User Stats"
    frame $base.fra20  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    message $base.fra20.mes32  -aspect 1500 -background grey85 -font headingfont -foreground black  -highlightbackground grey85 -padx 5 -pady 2  -text {Check the Progress of Your Friends} 
    frame $base.fra21  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    frame $base.fra21.fra23  -background black -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra21.fra23.fra23  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra23.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text Group -width 17 
    entry $base.fra21.fra23.fra23.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_group)  -width 25 
    frame $base.fra21.fra23.fra24  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra24.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Group's URL}  -width 17 
    button $base.fra21.fra23.fra24.but25  -background grey85  -command {seti_launchBrowser $seti(users_groupurl)} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -text Show 
    entry $base.fra21.fra23.fra24.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_groupurl)  -width 25 
    frame $base.fra21.fra23.fra21  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra21.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text Name -width 17 
    entry $base.fra21.fra23.fra21.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_name)  -width 25 
    frame $base.fra21.fra23.fra22  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra22.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {User's URL}  -width 17 
    button $base.fra21.fra23.fra22.but26  -background grey85 -command {seti_launchBrowser $seti(users_url)}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -text Show 
    entry $base.fra21.fra23.fra22.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_url)  -width 25 
    frame $base.fra21.fra23.04  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.04.05  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Results Returned}  -width 17 
    entry $base.fra21.fra23.04.06  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_units_received)  -width 25 
    frame $base.fra21.fra23.07  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.07.08  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Total   CPU Time}  -width 17 
    entry $base.fra21.fra23.07.09  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_cpu_total)  -width 25 
    frame $base.fra21.fra23.010  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.010.011  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Average CPU Time}  -width 17 
    entry $base.fra21.fra23.010.012  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_cpu_avg)  -width 25 
    frame $base.fra21.fra23.fra26  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra26.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text Rank -width 17 
    entry $base.fra21.fra23.fra26.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_rank)  -width 25 
    frame $base.fra21.fra23.fra28  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra28.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text Position -width 17 
    entry $base.fra21.fra23.fra28.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_position)  -width 25 
    frame $base.fra21.fra23.fra18  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra18.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Last Return}  -width 17 
    entry $base.fra21.fra23.fra18.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_last_return)  -width 25 
    frame $base.fra21.fra23.fra19  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra19.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Registered On}  -width 17 
    entry $base.fra21.fra23.fra19.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_registered_on)  -width 25 
    frame $base.fra21.fra23.fra20  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra21.fra23.fra20.01  -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {SETI User For}  -width 17 
    entry $base.fra21.fra23.fra20.02  -background green -cursor {} -exportselection 0 -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(users_user_for)  -width 25 
    frame $base.fra22  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    frame $base.fra22.fra26  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    frame $base.fra22.fra26.cpd28  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra22.fra26.cpd28.01  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Email Address} 
    entry $base.fra22.fra26.cpd28.02  -background white -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0  -textvariable seti(users_email_addr) 
    bind $base.fra22.fra26.cpd28.02 <Key-Return> {
        seti_userStats get
    }
    frame $base.fra22.fra26.cpd29  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    listbox $base.fra22.fra26.cpd29.01  -background grey85 -font dialogfont -foreground black -height 4  -highlightbackground grey85 -highlightthickness 0  -xscrollcommand {.top19.fra22.fra26.cpd29.02 set}  -yscrollcommand {.top19.fra22.fra26.cpd29.03 set} 
    bind $base.fra22.fra26.cpd29.01 <ButtonRelease-1> {
        seti_userStats set
    }
    bind $base.fra22.fra26.cpd29.01 <Double-Button-1> {
        seti_userStats get
    }
    scrollbar $base.fra22.fra26.cpd29.02  -background grey85 -borderwidth 1  -command {.top19.fra22.fra26.cpd29.01 xview}  -highlightbackground grey85 -highlightthickness 0 -orient horizontal  -width 10 
    scrollbar $base.fra22.fra26.cpd29.03  -background grey85 -borderwidth 1  -command {.top19.fra22.fra26.cpd29.01 yview}  -highlightbackground grey85 -highlightthickness 0 -width 10 
    frame $base.fra22.fra27  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra22.fra27.but30  -background grey85 -command {seti_userStats get} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -text {Get Stats} 
    button $base.fra22.fra27.but31  -background grey85 -command {seti_userStats remove} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -text {Remove Name} 
    frame $base.fra24  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra24.but25  -background grey85 -command {seti_userStats hide} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -text Done -width 10 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.fra20  -in .top19 -anchor center -expand 0 -fill x -pady 10 -side top 
    pack $base.fra20.mes32  -in .top19.fra20 -anchor center -expand 1 -fill x -side top 
    pack $base.fra21  -in .top19 -anchor center -expand 0 -fill x -padx 20 -side top 
    pack $base.fra21.fra23  -in .top19.fra21 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra23  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra23.01  -in .top19.fra21.fra23.fra23 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra23.02  -in .top19.fra21.fra23.fra23 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra24  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra24.01  -in .top19.fra21.fra23.fra24 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra24.but25  -in .top19.fra21.fra23.fra24 -anchor center -expand 0 -fill none  -side right 
    pack $base.fra21.fra23.fra24.02  -in .top19.fra21.fra23.fra24 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra21  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra21.01  -in .top19.fra21.fra23.fra21 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra21.02  -in .top19.fra21.fra23.fra21 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra22  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra22.01  -in .top19.fra21.fra23.fra22 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra22.but26  -in .top19.fra21.fra23.fra22 -anchor center -expand 0 -fill none  -side right 
    pack $base.fra21.fra23.fra22.02  -in .top19.fra21.fra23.fra22 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.04  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.04.05  -in .top19.fra21.fra23.04 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra21.fra23.04.06  -in .top19.fra21.fra23.04 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.07  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.07.08  -in .top19.fra21.fra23.07 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra21.fra23.07.09  -in .top19.fra21.fra23.07 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.010  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.010.011  -in .top19.fra21.fra23.010 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.010.012  -in .top19.fra21.fra23.010 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra26  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra26.01  -in .top19.fra21.fra23.fra26 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra26.02  -in .top19.fra21.fra23.fra26 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra28  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra28.01  -in .top19.fra21.fra23.fra28 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra28.02  -in .top19.fra21.fra23.fra28 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra18  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra18.01  -in .top19.fra21.fra23.fra18 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra18.02  -in .top19.fra21.fra23.fra18 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra19  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra19.01  -in .top19.fra21.fra23.fra19 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra19.02  -in .top19.fra21.fra23.fra19 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra21.fra23.fra20  -in .top19.fra21.fra23 -anchor center -expand 0 -fill x -side top 
    pack $base.fra21.fra23.fra20.01  -in .top19.fra21.fra23.fra20 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra21.fra23.fra20.02  -in .top19.fra21.fra23.fra20 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra22  -in .top19 -anchor center -expand 1 -fill both -padx 20 -pady 10  -side top 
    pack $base.fra22.fra26  -in .top19.fra22 -anchor center -expand 1 -fill both -side left 
    pack $base.fra22.fra26.cpd28  -in .top19.fra22.fra26 -anchor center -expand 0 -fill x -side top 
    pack $base.fra22.fra26.cpd28.01  -in .top19.fra22.fra26.cpd28 -anchor center -expand 0 -fill none  -padx 2 -pady 2 -side left 
    pack $base.fra22.fra26.cpd28.02  -in .top19.fra22.fra26.cpd28 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra22.fra26.cpd29  -in .top19.fra22.fra26 -anchor ne -expand 1 -fill both -side top 
    grid columnconf $base.fra22.fra26.cpd29 0 -weight 1
    grid rowconf $base.fra22.fra26.cpd29 0 -weight 1
    grid $base.fra22.fra26.cpd29.01  -in .top19.fra22.fra26.cpd29 -column 0 -row 0 -columnspan 1  -rowspan 1 -sticky nesw 
    grid $base.fra22.fra26.cpd29.02  -in .top19.fra22.fra26.cpd29 -column 0 -row 1 -columnspan 1  -rowspan 1 -sticky ew 
    grid $base.fra22.fra26.cpd29.03  -in .top19.fra22.fra26.cpd29 -column 1 -row 0 -columnspan 1  -rowspan 1 -sticky ns 
    pack $base.fra22.fra27  -in .top19.fra22 -anchor center -expand 0 -fill y -side right 
    pack $base.fra22.fra27.but30  -in .top19.fra22.fra27 -anchor n -expand 0 -fill x -ipady 1 -side top 
    pack $base.fra22.fra27.but31  -in .top19.fra22.fra27 -anchor n -expand 0 -fill x -ipady 2 -pady 10  -side top 
    pack $base.fra24  -in .top19 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra24.but25  -in .top19.fra24 -anchor center -expand 0 -fill none -side top
}

proc vTclWindow.top20 {base} {
    if {$base == ""} {
        set base .top20
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 159x325+658+358
    wm maxsize $base 1137 870
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - Devices"
    frame $base.fra21  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    label $base.fra21.lab24  -background grey85 -borderwidth 1 -font headingfont -foreground black  -highlightbackground grey85 -text {Select Device}  -textvariable seti(select_title) 
    frame $base.fra22  -background grey85 -borderwidth 2 -highlightbackground grey85  -relief groove 
    frame $base.fra22.cpd25  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    listbox $base.fra22.cpd25.01  -background grey85 -exportselection 0 -font dialogfont  -foreground black -height 4 -highlightbackground grey85  -highlightthickness 0 -xscrollcommand {.top20.fra22.cpd25.02 set}  -yscrollcommand {.top20.fra22.cpd25.03 set} 
    bind $base.fra22.cpd25.01 <Double-Button-1> {
        set seti(device_done) 1
    }
    scrollbar $base.fra22.cpd25.02  -background grey85 -borderwidth 1  -command {.top20.fra22.cpd25.01 xview} -highlightbackground grey85  -highlightthickness 0 -orient horiz -width 10 
    scrollbar $base.fra22.cpd25.03  -background grey85 -borderwidth 1  -command {.top20.fra22.cpd25.01 yview} -highlightbackground grey85  -highlightthickness 0 -orient vert -width 10 
    frame $base.fra23  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra23.but26  -background grey85 -command {set seti(device_done) 1}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text OK -width 10 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.fra21  -in .top20 -anchor center -expand 0 -fill none -pady 10 -side top 
    pack $base.fra21.lab24  -in .top20.fra21 -anchor center -expand 0 -fill none -side top 
    pack $base.fra22  -in .top20 -anchor center -expand 1 -fill both -pady 5 -side top 
    pack $base.fra22.cpd25  -in .top20.fra22 -anchor center -expand 1 -fill both -side top 
    grid columnconf $base.fra22.cpd25 0 -weight 1
    grid rowconf $base.fra22.cpd25 0 -weight 1
    grid $base.fra22.cpd25.01  -in .top20.fra22.cpd25 -column 0 -row 0 -columnspan 1 -rowspan 1  -sticky nesw 
    grid $base.fra22.cpd25.02  -in .top20.fra22.cpd25 -column 0 -row 1 -columnspan 1 -rowspan 1  -sticky ew 
    grid $base.fra22.cpd25.03  -in .top20.fra22.cpd25 -column 1 -row 0 -columnspan 1 -rowspan 1  -sticky ns 
    pack $base.fra23  -in .top20 -anchor center -expand 0 -fill x -pady 10 -side top 
    pack $base.fra23.but26  -in .top20.fra23 -anchor center -expand 0 -fill none -side top
}

proc vTclWindow.top21 {base} {
    if {$base == ""} {
        set base .top21
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 306x141+253+310
    wm maxsize $base 1137 870
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - New Version!"
    frame $base.fra22  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    message $base.fra22.mes25  -aspect 1500 -background grey85 -font headingfont  -foreground black -highlightbackground grey85 -padx 5 -pady 2  -text {New TkSETI Version Available!} 
    frame $base.fra23  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra23.cpd26  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra23.cpd26.01  -anchor w -background grey85  -font dialogfont  -foreground black -highlightbackground grey85 -relief groove  -text {Your Version} 
    entry $base.fra23.cpd26.02  -background green -cursor {}  -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(tksetiVersion) -width 6 
    frame $base.fra23.fra27  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra23.fra27.01  -anchor w -background grey85  -font dialogfont  -foreground black -highlightbackground grey85 -relief groove  -text {New  Version} 
    entry $base.fra23.fra27.02  -background green -cursor {}  -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -state disabled -textvariable seti(_newtksetiVersion) -width 6 
    frame $base.fra24  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra24.but28  -background grey85 -command {seti_checkTkSetiVersion hide}  -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 11 -pady 4 -text OK -width 8 
    button $base.fra24.but29  -background grey85 -command {seti_checkTkSetiVersion browse}  -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 11 -pady 4 -text {TkSETI Web Page} 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.fra22  -in .top21 -anchor center -expand 0 -fill none -side top 
    pack $base.fra22.mes25  -in .top21.fra22 -anchor center -expand 1 -fill x -side top 
    pack $base.fra23  -in .top21 -anchor center -expand 0 -fill none -pady 5 -side top 
    pack $base.fra23.cpd26  -in .top21.fra23 -anchor center -expand 0 -fill none -side top 
    pack $base.fra23.cpd26.01  -in .top21.fra23.cpd26 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra23.cpd26.02  -in .top21.fra23.cpd26 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra23.fra27  -in .top21.fra23 -anchor center -expand 0 -fill none -side top 
    pack $base.fra23.fra27.01  -in .top21.fra23.fra27 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra23.fra27.02  -in .top21.fra23.fra27 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra24  -in .top21 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra24.but28  -in .top21.fra24 -anchor e -expand 1 -fill none -padx 10 -side left 
    pack $base.fra24.but29  -in .top21.fra24 -anchor w -expand 1 -fill none -padx 10 -side left
}

proc vTclWindow.top22 {base} {
    if {$base == ""} {
        set base .top22
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background black -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 800x481+165+135
    wm maxsize $base 1137 834
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - Sky Map"
    frame $base.fra23  -background black -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra23.cpd26  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra23.cpd26.01  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Right Ascension} 
    entry $base.fra23.cpd26.02  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(skymap_ra) -width 25 
    frame $base.fra23.cpd27  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra23.cpd27.01  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text Declination 
    entry $base.fra23.cpd27.02  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(skymap_dec) -width 26 
    frame $base.fra24  -background black -height 75 -highlightbackground grey85 -width 125 
    frame $base.fra24.cpd20  -background black -height 30 -highlightbackground grey85 -width 30 
    scrollbar $base.fra24.cpd20.01  -background grey85 -borderwidth 1  -command {.top22.fra24.cpd20.03 xview} -highlightbackground grey85  -highlightthickness 0 -orient horizontal -troughcolor black -width 10 
    scrollbar $base.fra24.cpd20.02  -background grey85 -borderwidth 1  -command {.top22.fra24.cpd20.03 yview} -highlightbackground grey85  -highlightthickness 0 -troughcolor black -width 10 
    canvas $base.fra24.cpd20.03  -background black -height 100 -highlightbackground grey85  -highlightthickness 0 -width 100  -xscrollcommand {.top22.fra24.cpd20.01 set}  -yscrollcommand {.top22.fra24.cpd20.02 set} 
    bind $base.fra24.cpd20.03 <B2-Motion> {
        $widget(SkymapCanvas) scan dragto  %x %y
    }
    bind $base.fra24.cpd20.03 <Button-2> {
        seti_skymap button2Down %x %y
    }
    frame $base.fra25  -background black -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra25.but29  -background grey85 -command {seti_skymap hide} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -text Close -width 10 
    button $base.fra25.but30  -background grey85 -command {seti_skymap togglearrow}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -text {Hide Arrow} 
    button $base.fra25.but25  -background grey85 -command {seti_skymap togglelocs} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 9 -pady 3 -text {Hide Locations} 
    button $base.fra25.but17  -background grey85 -command {seti_skymap togglespike}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -text {Hide Spike} 
    button $base.fra25.but19  -background grey85 -command {seti_skymap togglegaussian}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -text {Hide Gaussian} 
    button $base.fra25.but26  -background grey85 -command {seti_skymap togglepulse}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -text {Hide Pulse} 
    button $base.fra25.but27  -background grey85 -command {seti_skymap toggletriplet}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 9 -pady 3 -text {Hide Triplet} 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.fra23  -in .top22 -anchor center -expand 0 -fill x -pady 6 -side top 
    pack $base.fra23.cpd26  -in .top22.fra23 -anchor e -expand 1 -fill none -padx 10 -side left 
    pack $base.fra23.cpd26.01  -in .top22.fra23.cpd26 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra23.cpd26.02  -in .top22.fra23.cpd26 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra23.cpd27  -in .top22.fra23 -anchor w -expand 1 -fill none -padx 10 -side left 
    pack $base.fra23.cpd27.01  -in .top22.fra23.cpd27 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra23.cpd27.02  -in .top22.fra23.cpd27 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra24  -in .top22 -anchor center -expand 1 -fill both -padx 10 -pady 10  -side top 
    pack $base.fra24.cpd20  -in .top22.fra24 -anchor center -expand 1 -fill both -side top 
    grid columnconf $base.fra24.cpd20 0 -weight 1
    grid rowconf $base.fra24.cpd20 0 -weight 1
    grid $base.fra24.cpd20.01  -in .top22.fra24.cpd20 -column 0 -row 1 -columnspan 1 -rowspan 1  -sticky ew 
    grid $base.fra24.cpd20.02  -in .top22.fra24.cpd20 -column 1 -row 0 -columnspan 1 -rowspan 1  -sticky ns 
    grid $base.fra24.cpd20.03  -in .top22.fra24.cpd20 -column 0 -row 0 -columnspan 1 -rowspan 1  -sticky nesw 
    pack $base.fra25  -in .top22 -anchor center -expand 0 -fill x -ipady 6 -side top 
    pack $base.fra25.but29  -in .top22.fra25 -anchor w -expand 1 -fill x -side left 
    pack $base.fra25.but30  -in .top22.fra25 -anchor w -expand 1 -fill x -side left 
    pack $base.fra25.but25  -in .top22.fra25 -anchor w -expand 1 -fill x -side left 
    pack $base.fra25.but17  -in .top22.fra25 -anchor w -expand 1 -fill x -side left 
    pack $base.fra25.but19  -in .top22.fra25 -anchor w -expand 1 -fill x -side left 
    pack $base.fra25.but26  -in .top22.fra25 -anchor w -expand 1 -fill x -side left 
    pack $base.fra25.but27  -in .top22.fra25 -anchor w -expand 1 -fill x -side left
}

proc vTclWindow.top23 {base} {
    if {$base == ""} {
        set base .top23
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 542x172+113+3
    wm maxsize $base 1137 834
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - New Big Spike!"
    message $base.mes24  -aspect 1500 -background grey85 -font headingfont -foreground black  -highlightbackground grey85 -padx 5 -pady 2  -text {Congratulations! A new Big Spike!} 
    frame $base.fra27  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra27.fra28  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra27.fra28.01  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra27.fra28.01.02  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Old Power}  -width 10 
    entry $base.fra27.fra28.01.03  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bs_power) -width 14 
    frame $base.fra27.fra28.04  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra27.fra28.04.05  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {New Power}  -width 10 
    entry $base.fra27.fra28.04.06  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bs_power) -width 14 
    frame $base.fra27.fra29  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra27.fra29.01  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra27.fra29.01.02  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra27.fra29.01.03  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bs_date) -width 30 
    frame $base.fra27.fra29.04  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra27.fra29.04.05  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra27.fra29.04.06  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bs_date) -width 30 
    frame $base.fra26  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra26.01  -background grey85 -command {seti_checkScores hide spike}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text OK -width 8 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.mes24  -in .top23 -anchor center -expand 0 -fill x -pady 4 -side top 
    pack $base.fra27  -in .top23 -anchor center -expand 0 -fill none -pady 10 -side top 
    pack $base.fra27.fra28  -in .top23.fra27 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra27.fra28.01  -in .top23.fra27.fra28 -anchor center -expand 0 -fill none -side top 
    pack $base.fra27.fra28.01.02  -in .top23.fra27.fra28.01 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra27.fra28.01.03  -in .top23.fra27.fra28.01 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra27.fra28.04  -in .top23.fra27.fra28 -anchor center -expand 0 -fill none -side top 
    pack $base.fra27.fra28.04.05  -in .top23.fra27.fra28.04 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra27.fra28.04.06  -in .top23.fra27.fra28.04 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra27.fra29  -in .top23.fra27 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra27.fra29.01  -in .top23.fra27.fra29 -anchor center -expand 0 -fill none -side top 
    pack $base.fra27.fra29.01.02  -in .top23.fra27.fra29.01 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra27.fra29.01.03  -in .top23.fra27.fra29.01 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra27.fra29.04  -in .top23.fra27.fra29 -anchor center -expand 0 -fill none -side top 
    pack $base.fra27.fra29.04.05  -in .top23.fra27.fra29.04 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra27.fra29.04.06  -in .top23.fra27.fra29.04 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra26  -in .top23 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra26.01  -in .top23.fra26 -anchor center -expand 1 -fill none -padx 10  -side top
}

proc vTclWindow.top29 {base} {
    if {$base == ""} {
        set base .top29
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 544x167+212+363
    wm maxsize $base 1137 834
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - New Big Pulse!"
    message $base.mes30  -aspect 1500 -background grey85 -font headingfont -foreground black  -highlightbackground grey85 -padx 5 -pady 2  -text {Congratulations! A new Big Pulse!} 
    frame $base.fra31  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra31.01  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra31.01.02  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra31.01.02.03  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Old Score}  -width 10 
    entry $base.fra31.01.02.04  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bp_score) -width 14 
    frame $base.fra31.01.05  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra31.01.05.06  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {New Score}  -width 10 
    entry $base.fra31.01.05.07  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bp_score) -width 14 
    frame $base.fra31.08  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra31.08.09  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra31.08.09.010  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra31.08.09.011  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bp_date) -width 30 
    frame $base.fra31.08.012  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra31.08.012.013  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra31.08.012.014  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bp_date) -width 30 
    frame $base.fra32  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra32.01  -background grey85 -command {seti_checkScores hide pulse}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text OK -width 8 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.mes30  -in .top29 -anchor center -expand 0 -fill x -pady 4 -side top 
    pack $base.fra31  -in .top29 -anchor center -expand 0 -fill none -pady 10 -side top 
    pack $base.fra31.01  -in .top29.fra31 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra31.01.02  -in .top29.fra31.01 -anchor center -expand 0 -fill none -side top 
    pack $base.fra31.01.02.03  -in .top29.fra31.01.02 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra31.01.02.04  -in .top29.fra31.01.02 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra31.01.05  -in .top29.fra31.01 -anchor center -expand 0 -fill none -side top 
    pack $base.fra31.01.05.06  -in .top29.fra31.01.05 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra31.01.05.07  -in .top29.fra31.01.05 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra31.08  -in .top29.fra31 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra31.08.09  -in .top29.fra31.08 -anchor center -expand 0 -fill none -side top 
    pack $base.fra31.08.09.010  -in .top29.fra31.08.09 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra31.08.09.011  -in .top29.fra31.08.09 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra31.08.012  -in .top29.fra31.08 -anchor center -expand 0 -fill none -side top 
    pack $base.fra31.08.012.013  -in .top29.fra31.08.012 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra31.08.012.014  -in .top29.fra31.08.012 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra32  -in .top29 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra32.01  -in .top29.fra32 -anchor center -expand 1 -fill none -padx 10  -side top
}

proc vTclWindow.top30 {base} {
    if {$base == ""} {
        set base .top30
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 337x228+256+258
    wm maxsize $base 1137 870
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - Famous People"
    frame $base.fra31  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    message $base.fra31.mes37  -aspect 1500 -background grey85 -font headingfont -foreground black  -highlightbackground grey85 -padx 5 -pady 2 -text Congratulations! 
    frame $base.fra32  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra32.fra34  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    message $base.fra32.fra34.mes39  -anchor w -aspect 0 -background grey85 -font dialogfont  -foreground black -highlightbackground grey85 -padx 5 -pady 2  -text {Found in the Top Users List:}  -textvariable seti(famous_users_str) -width 230 
    button $base.fra32.fra34.but41  -background grey85 -command {seti_checkFamous browse users}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text Browse... 
    frame $base.fra32.fra42  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    message $base.fra32.fra42.01  -anchor w -aspect 0 -background grey85 -font dialogfont  -foreground black -highlightbackground grey85 -padx 5 -pady 2  -text {Found in the Top Spikes List:}  -textvariable seti(famous_spikes_str) -width 230 
    button $base.fra32.fra42.02  -background grey85 -command {seti_checkFamous browse spikes}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text Browse... 
    frame $base.fra32.fra43  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -relief groove -width 125 
    message $base.fra32.fra43.01  -anchor w -aspect 0 -background grey85 -font dialogfont  -foreground black -highlightbackground grey85 -padx 5 -pady 2  -text {Found in the Top Gaussians List:}  -textvariable seti(famous_gaussians_str) -width 230 
    button $base.fra32.fra43.02  -background grey85 -command {seti_checkFamous browse gaussians}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text Browse... 
    frame $base.fra33  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra33.but38  -background grey85 -command {seti_checkFamous hide} -font dialogfont  -foreground black -highlightbackground grey85 -highlightthickness 0  -padx 11 -pady 4 -text OK -width 10 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.fra31  -in .top30 -anchor n -expand 0 -fill x -side top 
    pack $base.fra31.mes37  -in .top30.fra31 -anchor n -expand 0 -fill x -pady 10 -side top 
    pack $base.fra32  -in .top30 -anchor center -expand 1 -fill both -side top 
    pack $base.fra32.fra34  -in .top30.fra32 -anchor center -expand 1 -fill x -pady 2 -side top 
    pack $base.fra32.fra34.mes39  -in .top30.fra32.fra34 -anchor w -expand 1 -fill both -side left 
    pack $base.fra32.fra34.but41  -in .top30.fra32.fra34 -anchor center -expand 0 -fill none -side left 
    pack $base.fra32.fra42  -in .top30.fra32 -anchor center -expand 1 -fill x -pady 2 -side top 
    pack $base.fra32.fra42.01  -in .top30.fra32.fra42 -anchor w -expand 1 -fill both -side left 
    pack $base.fra32.fra42.02  -in .top30.fra32.fra42 -anchor center -expand 0 -fill none -side left 
    pack $base.fra32.fra43  -in .top30.fra32 -anchor center -expand 1 -fill x -pady 2 -side top 
    pack $base.fra32.fra43.01  -in .top30.fra32.fra43 -anchor w -expand 1 -fill both -side left 
    pack $base.fra32.fra43.02  -in .top30.fra32.fra43 -anchor center -expand 0 -fill none -side left 
    pack $base.fra33  -in .top30 -anchor s -expand 1 -fill x -pady 10 -side bottom 
    pack $base.fra33.but38  -in .top30.fra33 -anchor center -expand 0 -fill none -side top
}

proc vTclWindow.top31 {base} {
    if {$base == ""} {
        set base .top31
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 544x171+160+183
    wm maxsize $base 1137 834
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - New Big Gaussian!"
    message $base.mes32  -aspect 1500 -background grey85 -font headingfont -foreground black  -highlightbackground grey85 -padx 5 -pady 2  -text {Congratulations! A new Big Gaussian!} 
    frame $base.fra33  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra33.01  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra33.01.02  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra33.01.02.03  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Old Score}  -width 10 
    entry $base.fra33.01.02.04  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bg_score) -width 14 
    frame $base.fra33.01.05  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra33.01.05.06  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {New Score}  -width 10 
    entry $base.fra33.01.05.07  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bg_score) -width 14 
    frame $base.fra33.08  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra33.08.09  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra33.08.09.010  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra33.08.09.011  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bg_date) -width 30 
    frame $base.fra33.08.012  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra33.08.012.013  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra33.08.012.014  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bg_date) -width 30 
    frame $base.fra34  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra34.01  -background grey85 -command {seti_checkScores hide gaussian}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text OK -width 8 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.mes32  -in .top31 -anchor center -expand 0 -fill x -pady 4 -side top 
    pack $base.fra33  -in .top31 -anchor center -expand 0 -fill none -pady 10 -side top 
    pack $base.fra33.01  -in .top31.fra33 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra33.01.02  -in .top31.fra33.01 -anchor center -expand 0 -fill none -side top 
    pack $base.fra33.01.02.03  -in .top31.fra33.01.02 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra33.01.02.04  -in .top31.fra33.01.02 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra33.01.05  -in .top31.fra33.01 -anchor center -expand 0 -fill none -side top 
    pack $base.fra33.01.05.06  -in .top31.fra33.01.05 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra33.01.05.07  -in .top31.fra33.01.05 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra33.08  -in .top31.fra33 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra33.08.09  -in .top31.fra33.08 -anchor center -expand 0 -fill none -side top 
    pack $base.fra33.08.09.010  -in .top31.fra33.08.09 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra33.08.09.011  -in .top31.fra33.08.09 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra33.08.012  -in .top31.fra33.08 -anchor center -expand 0 -fill none -side top 
    pack $base.fra33.08.012.013  -in .top31.fra33.08.012 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra33.08.012.014  -in .top31.fra33.08.012 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra34  -in .top31 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra34.01  -in .top31.fra34 -anchor center -expand 1 -fill none -padx 10  -side top
}

proc vTclWindow.top33 {base} {
    if {$base == ""} {
        set base .top33
    }
    if {[winfo exists $base]} {
        wm deiconify $base; return
    }
    ###################
    # CREATING WIDGETS
    ###################
    toplevel $base -class Toplevel  -background grey85 -highlightbackground grey85 
    wm focusmodel $base passive
    wm geometry $base 545x169+259+542
    wm maxsize $base 1137 834
    wm minsize $base 1 1
    wm overrideredirect $base 0
    wm resizable $base 1 1
    wm title $base "Tk-SETI@Home - New Big Triplet!"
    message $base.mes34  -aspect 1500 -background grey85 -font headingfont -foreground black  -highlightbackground grey85 -padx 5 -pady 2  -text {Congratulations! A new Big Triplet!} 
    frame $base.fra35  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra35.01  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra35.01.02  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra35.01.02.03  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Old Power}  -width 10 
    entry $base.fra35.01.02.04  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bt_power) -width 14 
    frame $base.fra35.01.05  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra35.01.05.06  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {New Power}  -width 10 
    entry $base.fra35.01.05.07  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bt_power) -width 14 
    frame $base.fra35.08  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    frame $base.fra35.08.09  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra35.08.09.010  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra35.08.09.011  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(old_bt_date) -width 30 
    frame $base.fra35.08.012  -background grey85 -borderwidth 1 -height 30  -highlightbackground grey85 -relief raised -width 30 
    label $base.fra35.08.012.013  -anchor w -background grey85 -font dialogfont -foreground black  -highlightbackground grey85 -relief groove -text {Date Found}  -width 10 
    entry $base.fra35.08.012.014  -background green -cursor {} -font dialogfont -foreground black  -highlightbackground grey85 -highlightthickness 0 -state disabled  -textvariable seti(new_bt_date) -width 30 
    frame $base.fra36  -background grey85 -borderwidth 2 -height 75  -highlightbackground grey85 -width 125 
    button $base.fra36.01  -background grey85 -command {seti_checkScores hide triplet}  -font dialogfont -foreground black -highlightbackground grey85  -highlightthickness 0 -padx 11 -pady 4 -text OK -width 8 
    ###################
    # SETTING GEOMETRY
    ###################
    pack $base.mes34  -in .top33 -anchor center -expand 0 -fill x -pady 4 -side top 
    pack $base.fra35  -in .top33 -anchor center -expand 0 -fill none -pady 10 -side top 
    pack $base.fra35.01  -in .top33.fra35 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra35.01.02  -in .top33.fra35.01 -anchor center -expand 0 -fill none -side top 
    pack $base.fra35.01.02.03  -in .top33.fra35.01.02 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra35.01.02.04  -in .top33.fra35.01.02 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra35.01.05  -in .top33.fra35.01 -anchor center -expand 0 -fill none -side top 
    pack $base.fra35.01.05.06  -in .top33.fra35.01.05 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra35.01.05.07  -in .top33.fra35.01.05 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra35.08  -in .top33.fra35 -anchor center -expand 0 -fill none -pady 5  -side left 
    pack $base.fra35.08.09  -in .top33.fra35.08 -anchor center -expand 0 -fill none -side top 
    pack $base.fra35.08.09.010  -in .top33.fra35.08.09 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra35.08.09.011  -in .top33.fra35.08.09 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra35.08.012  -in .top33.fra35.08 -anchor center -expand 0 -fill none -side top 
    pack $base.fra35.08.012.013  -in .top33.fra35.08.012 -anchor center -expand 0 -fill none -padx 2  -pady 2 -side left 
    pack $base.fra35.08.012.014  -in .top33.fra35.08.012 -anchor center -expand 1 -fill x -padx 2  -pady 2 -side right 
    pack $base.fra36  -in .top33 -anchor center -expand 0 -fill x -pady 5 -side top 
    pack $base.fra36.01  -in .top33.fra36 -anchor center -expand 1 -fill none -padx 10  -side top
}

Window show .
Window show .top17

main $argc $argv
