#!/usr/local/bin/pbs_wish -f
###############################################################################
# xpbsmon-gui: The GUI front end to the PBS user and operator commands.
#
# Written by Albeaus Bayucan
# History
#       Initial Date: 2/26/98
###############################################################################
#         OpenPBS (Portable Batch System) v2.3 Software License
# 
# Copyright (c) 1999-2000 Veridian Information Solutions, Inc.
# All rights reserved.
# 
# ---------------------------------------------------------------------------
# For a license to use or redistribute the OpenPBS software under conditions
# other than those described below, or to purchase support for this software,
# please contact Veridian Systems, PBS Products Department ("Licensor") at:
# 
#    www.OpenPBS.org  +1 650 967-4675                  sales@OpenPBS.org
#                        877 902-4PBS (US toll-free)
# ---------------------------------------------------------------------------
# 
# This license covers use of the OpenPBS v2.3 software (the "Software") at
# your site or location, and, for certain users, redistribution of the
# Software to other sites and locations.  Use and redistribution of
# OpenPBS v2.3 in source and binary forms, with or without modification,
# are permitted provided that all of the following conditions are met.
# After December 31, 2001, only conditions 3-6 must be met:
# 
# 1. Commercial and/or non-commercial use of the Software is permitted
#    provided a current software registration is on file at www.OpenPBS.org.
#    If use of this software contributes to a publication, product, or
#    service, proper attribution must be given; see www.OpenPBS.org/credit.html
# 
# 2. Redistribution in any form is only permitted for non-commercial,
#    non-profit purposes.  There can be no charge for the Software or any
#    software incorporating the Software.  Further, there can be no
#    expectation of revenue generated as a consequence of redistributing
#    the Software.
# 
# 3. Any Redistribution of source code must retain the above copyright notice
#    and the acknowledgment contained in paragraph 6, this list of conditions
#    and the disclaimer contained in paragraph 7.
# 
# 4. Any Redistribution in binary form must reproduce the above copyright
#    notice and the acknowledgment contained in paragraph 6, this list of
#    conditions and the disclaimer contained in paragraph 7 in the
#    documentation and/or other materials provided with the distribution.
# 
# 5. Redistributions in any form must be accompanied by information on how to
#    obtain complete source code for the OpenPBS software and any
#    modifications and/or additions to the OpenPBS software.  The source code
#    must either be included in the distribution or be available for no more
#    than the cost of distribution plus a nominal fee, and all modifications
#    and additions to the Software must be freely redistributable by any party
#    (including Licensor) without restriction.
# 
# 6. All advertising materials mentioning features or use of the Software must
#    display the following acknowledgment:
# 
#     "This product includes software developed by NASA Ames Research Center,
#     Lawrence Livermore National Laboratory, and Veridian Information
#     Solutions, Inc.
#     Visit www.OpenPBS.org for OpenPBS software support,
#     products, and information."
# 
# 7. DISCLAIMER OF WARRANTY
# 
# THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT
# ARE EXPRESSLY DISCLAIMED.
# 
# IN NO EVENT SHALL VERIDIAN CORPORATION, ITS AFFILIATED COMPANIES, OR THE
# U.S. GOVERNMENT OR ANY OF ITS AGENCIES BE LIABLE FOR ANY DIRECT OR INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# 
# This license will be governed by the laws of the Commonwealth of Virginia,
# without reference to its choice of law rules.
################################################################################

global env
if { ![info exists env(DISPLAY)] } {
        puts "DISPLAY variable not set."
        exit 1
}
set XPBSMON_VERSION 2.3

set libdir /usr/local/lib/xpbsmon
set appdefdir /usr/local/lib/xpbsmon
set bitmap_dir	      $libdir/bitmaps	
set helpdir           $libdir/help
set bindir            $libdir/bin
set auto_path         [linsert $auto_path 0 $libdir]
set auto_path         [linsert $auto_path 0 .]
set appDefaultsFile   $appdefdir/xpbsmonrc

set appname1 "xpbsmon"
set appname "${appname1}${XPBSMON_VERSION}"
if { [string compare $env(HOME) "/"] == 0 } {
	set sysinfo(rcFile) "/.${appname1}rc"
} else {
	set sysinfo(rcFile) "$env(HOME)/.${appname1}rc"
}
set sysinfo(appname) $appname

set BADPARAM 7000
set errmsg(BADPARAM) "A procedure has encountered a bad parameter."
set sysinfo(infoListBoxWidth) 73
set sysinfo(infoListBoxHeight) 3
set sysinfo(DATA_UPDATE_SEQ)  0
set sysinfo(systemFrame) ""
set sysinfo(LCK) 0
set sysinfo(PREFLCK) 0
set canvas(nodeColorINUSE_index) -1


Pref_Init $sysinfo(rcFile) $appDefaultsFile

## For items that are configurable, please add an entry on this array
set preferences { \
  {canvas(smallFg) smallForeground	#150567}
  {canvas(smallBg) smallBackground	#ffefdb}
  {canvas(smallBd) smallBorderWidth	2}
  {canvas(smallRelief) smallRelief	raised}
  {canvas(smallScrollBd) smallScrollBorderWidth 2}
  {canvas(smallScrollBg) smallScrollBackground #ffefdb}
  {canvas(smallScrollRelief) smallScrollRelief sunken}
  {canvas(smallCanvasBg) smallCanvasBackground #ffefdb}
  {canvas(smallCanvasBd) smallCanvasBorderWidth 1}
  {canvas(smallCanvasRelief) smallCanvasRelief flat}
  {canvas(smallLabelBd) smallLabelBorderWidth 0}
  {canvas(smallLabelBg) smallLabelBackground #ffefdb}
  {canvas(smallLabelRelief) smallLabelRelief flat}
  {canvas(smallLabelFg) smallLabelForeground #150567}
  {canvas(smallLabelFont) smallLabelFont "-misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1"}
  {canvas(smallLabelFontWidth) smallLabelFontWidth 7}
  {canvas(smallLabelFontHeight) smallLabelFontHeight 13}
  {canvas(smallTextFont) smallTextFont "-misc-fixed-medium-r-normal--9-90-75-75-c-60-iso8859-1"}
  {canvas(smallTextFontWidth) smallTextFontWidth 6}
  {canvas(smallTextFontHeight) smallTextFontHeight 9}
  {canvas(nodeColorNOINFO) nodeColorNOINFO black}
  {canvas(nodeColorFREE)  nodeColorFREE green}
  {canvas(nodeColorINUSEshared) nodeColorINUSEshared "#98f5ff"}
  {canvas(nodeColorINUSEexclusive) nodeColorINUSEexclusive "#a0522d #1e90ff #a9a9a9 #8470ff #a020f0"}
  {canvas(nodeColorDOWN)  nodeColorDOWN red}
  {canvas(nodeColorRSVD)  nodeColorRSVD yellow}
  {canvas(nodeColorOFFL)  nodeColorOFFL orange}
  {canvas(nodeColorTrough) nodeColorTrough white}
  {canvas(nodeColorSlider) nodeColorSlider red}
  {canvas(nodeColorExtendedTrough) nodeColorExtendedTrough blue}
  {canvas(nodeScaleFactor) nodeScaleFactor 1}
  {canvas(nodeMaxWidth) nodeBoxFullMaxWidth 350}
  {canvas(nodeMaxHeight) nodeBoxFullMaxHeight 100}
  {canvas(iconMaxWidth) nodeBoxIconMaxWidth 56}
  {canvas(iconMaxHeight) nodeBoxIconMaxHeight 56}
  {canvas(mirrorMaxWidth) nodeBoxMirrorMaxWidth 700}
  {canvas(mirrorMaxHeight) nodeBoxMirrorMaxHeight 400}
  {canvas(mirrorScaleFactor) nodeBoxMirrorScaleFactor 3}
  {canvas(medLabelFg) mediumLabelForeground #150567}
  {canvas(medLabelBg) mediumLabelBackground #cdc0b0}
  {canvas(medLabelBd) mediumLabelBorderWidth 4 }
  {canvas(medLabelRelief) mediumLabelRelief  ridge}
  {canvas(medLabelFont) mediumLabelFont "-misc-fixed-bold-r-normal--13-120-75-75-c-80-iso8859-1"}
  {canvas(medLabelFontWidth) mediumLabelFontWidth 8}
  {canvas(medLabelFontHeight) mediumLabelFontHeight 13}
  {canvas(medCanvasBd) mediumCanvasBorderWidth 1}
  {canvas(medCanvasBg) mediumCanvasBackground #cdc0b0}
  {canvas(medCanvasRelief) mediumCanvasRelief flat}
  {canvas(medScrollBd) mediumScrollBorderWidth 2}
  {canvas(medScrollBg) mediumScrollBackground #eedfcc}
  {canvas(medScrollRelief) mediumScrollRelief sunken}
  {canvas(medFg) mediumForeground #150567}
  {canvas(medBg) mediumBackground #cdc0b0}
  {canvas(medBd) mediumBorderWidth 10}
  {canvas(medRelief) mediumRelief ridge}
  {canvas(medTextFont) mediumTextFont "-misc-fixed-bold-r-normal--13-120-75-75-c-80-iso8859-1"}
  {canvas(medTextFontWidth) mediumTextFontWidth 8}
  {canvas(medTextFontHeight) mediumTextFontHeight 13}
  {canvas(clusterMaxWidth)  serverBoxMaxWidth 710}
  {canvas(clusterMaxHeight) serverBoxMaxHeight 600}
  {canvas(clusterNumBoxesPerRow) serverBoxMaxNumNodeBoxesPerRow 17}
  {canvas(bigBg) bigBackground #c8b9a6}
  {canvas(bigFg) bigForeground #150567}
  {canvas(bigBd) bigBorderWidth 2}
  {canvas(bigRelief) bigRelief raised}
  {canvas(bigActiveColor) bigActiveColor #9db2ff}
  {canvas(bigShadingColor) bigShadingColor #c7af92}
  {canvas(bigSelectorColor) bigSelectorColor #980517}
  {canvas(bigDisabledColor) bigDisabledColor #8f8e8d}
  {canvas(bigLabelBg) bigLabelBackground #c8b9a6}
  {canvas(bigLabelBd)  bigLabelBorderWidth 1}
  {canvas(bigLabelRelief) bigLabelRelief raised}
  {canvas(bigLabelFont) bigLabelFont "-misc-fixed-bold-r-normal--15-140-75-75-c-90-iso8859-1"}
  {canvas(bigLabelFontWidth) bigLabelFontWidth 9}
  {canvas(bigLabelFontHeight) bigLabelFontHeight 15}
  {canvas(bigLabelFg) bigLabelForeground #150567}
  {canvas(bigCanvasBg) bigCanvasBackground #c8b9a6}
  {canvas(bigCanvasRelief) bigCanvasRelief flat}
  {canvas(bigCanvasBd) bigCanvasBorderWidth 1}
  {canvas(bigScrollBd) bigScrollBorderWidth 2}
  {canvas(bigScrollBg) bigScrollBackground #c8b9a6}
  {canvas(bigScrollRelief) bigScrollRelief sunken}
  {canvas(bigTextFont) bigTextFont "-misc-fixed-bold-r-normal--15-140-75-75-c-90-iso8859-1"}
  {canvas(bigTextFontWidth) bigTextFontWidth 9}
  {canvas(bigTextFontHeight) bigTextFontHeight 15}
  {canvas(systemMaxWidth)  siteBoxMaxWidth 710}
  {canvas(systemMaxHeight) siteBoxMaxHeight 500}
  {canvas(systemNumBoxesPerRow) siteBoxMaxNumServerBoxesPerRow 10}
  {sysinfo(autoUpdateMins) autoUpdateMins 1}
  {sysinfo(autoUpdate) autoUpdate {CHOICE true false}}
  {sysinfo(systemName)    siteInView ""}
  {sysinfo(rcSiteInfoDelimeterChar) rcSiteInfoDelimeterChar ";"}
  {sitesinfo sitesInfo ""}
}

Pref_Add $preferences

prefLoadSitesInfo

option add *Plain*foreground $canvas(bigFg)
option add *Plain*background $canvas(bigBg)
option add *Plain*borderWidth 0
option add *Plain*relief flat
#option add *Plain*troughColor $canvas(bigBg)
option add *Plain*troughColor $canvas(bigShadingColor)
option add *Plain*activeForeground $canvas(bigFg)
option add *Plain*insertBackground $canvas(bigFg)
option add *Plain*selectForeground $canvas(bigFg)
option add *Plain*selectBackground $canvas(bigActiveColor)
option add *Plain*activeBackground $canvas(bigActiveColor)
option add *Plain*selector $canvas(bigSelectorColor)
option add *Plain*selectColor $canvas(bigSelectorColor)  ;# for 4.0
option add *Plain*disabledForeground $canvas(bigDisabledColor)
#option add *Plain*Scrollbar*troughColor $canvas(bigBg)
option add *Plain*Scrollbar*troughColor $canvas(bigShadingColor)
option add *Plain*Scrollbar*foreground $canvas(bigScrollBg)
option add *Plain*Scrollbar*background $canvas(bigScrollBg) ;# 4.0
option add *Plain*Scrollbar*activeForeground $canvas(bigActiveColor)
option add *Plain*Scrollbar*activeBackground $canvas(bigActiveColor)     ;# 4.0
option add *Plain*highlightColor $canvas(bigBg)
option add *Plain*highlightThickness 0
option add *Plain*font $canvas(bigTextFont)

option add *BigLabel*foreground $canvas(bigLabelFg)
option add *Big*foreground $canvas(bigFg)
option add *Big*background $canvas(bigBg)
option add *Big*borderWidth $canvas(bigBd)
option add *Big*relief $canvas(bigRelief)
option add *Big*troughColor $canvas(bigBg)
option add *Big*activeForeground $canvas(bigFg)
option add *Big*insertBackground $canvas(bigFg)
option add *Big*selectForeground $canvas(bigFg)
option add *Big*selectBackground $canvas(bigActiveColor)
option add *Big*activeBackground $canvas(bigActiveColor)
option add *Big*selector $canvas(bigSelectorColor)
option add *Big*selectColor $canvas(bigSelectorColor)  ;# for 4.0
option add *Big*disabledForeground $canvas(bigDisabledColor)
option add *Big*Scrollbar*troughColor $canvas(bigBg)
option add *Big*Scrollbar*foreground $canvas(bigScrollBg)
option add *Big*Scrollbar*background $canvas(bigScrollBg) ;# 4.0
option add *Big*Scrollbar*activeForeground $canvas(bigActiveColor)
option add *Big*Scrollbar*activeBackground $canvas(bigActiveColor)     ;# 4.0
option add *Big*highlightColor $canvas(bigBg)
option add *Big*highlightThickness 0

option add *BigLabel*foreground $canvas(bigLabelFg)
option add *BigLabel*background $canvas(bigLabelBg)
option add *BigLabel*borderWidth $canvas(bigLabelBd)
option add *BigLabel*relief $canvas(bigLabelRelief)
option add *BigLabel*font $canvas(bigLabelFont)
option add *BigLabel*background $canvas(bigShadingColor)

option add *BigCanvas*background $canvas(bigCanvasBg)
option add *BigCanvas*borderWidth $canvas(bigCanvasBd)
option add *BigCanvas*relief $canvas(bigCanvasRelief)

option add *BigScrollbar*borderWidth $canvas(bigScrollBd)
option add *BigScrollbar*background $canvas(bigScrollBg)
option add *BigScrollbar*relief $canvas(bigScrollRelief)
option add *Big*Scrollbar*troughColor $canvas(bigBg)
option add *Big*Scrollbar*foreground $canvas(bigScrollBg)
option add *Big*Scrollbar*activeForeground $canvas(bigActiveColor)
option add *Big*Scrollbar*activeBackground $canvas(bigActiveColor)     ;# 4.0
option add *Big*font $canvas(bigTextFont)

option add *Medium*foreground $canvas(medFg)
option add *Medium*background $canvas(medBg)
option add *Medium*borderWidth $canvas(medBd)
option add *Medium*relief $canvas(medRelief)
option add *Medium*font $canvas(medTextFont)

option add *MediumLabel*foreground $canvas(medLabelFg)
option add *MediumLabel*background $canvas(medLabelBg)
option add *MediumLabel*borderWidth $canvas(medLabelBd)
option add *MediumLabel*relief $canvas(medLabelRelief)
option add *MediumLabel*font $canvas(medLabelFont) 

option add *MediumCanvas*background $canvas(medCanvasBg)
option add *MediumCanvas*borderWidth $canvas(medCanvasBd)
option add *MediumCanvas*relief $canvas(medCanvasRelief)

option add *MediumScrollbar*borderWidth $canvas(medScrollBd)
option add *MediumScrollbar*background $canvas(medScrollBg)
option add *MediumScrollbar*relief $canvas(medScrollRelief)
option add *Medium*Scrollbar*troughColor $canvas(medBg)
option add *Medium*Scrollbar*foreground $canvas(medScrollBg)
option add *Medium*Scrollbar*activeForeground $canvas(bigActiveColor)
option add *Medium*Scrollbar*activeBackground $canvas(bigActiveColor)     ;# 4.0

option add *Small*foreground $canvas(smallFg)
option add *Small*background $canvas(smallBg)
option add *Small*borderWidth $canvas(smallBd)
option add *Small*relief $canvas(smallRelief)
option add *Small*font $canvas(smallTextFont)

option add *SmallLabel*foreground $canvas(smallLabelFg)
option add *SmallLabel*background $canvas(smallLabelBg)
option add *SmallLabel*borderWidth $canvas(smallLabelBd)
option add *SmallLabel*relief $canvas(smallLabelRelief)
option add *SmallLabel*font $canvas(smallLabelFont)

option add *SmallCanvas*background $canvas(smallCanvasBg)
option add *SmallCanvas*borderWidth $canvas(smallCanvasBd)
option add *SmallCanvas*relief $canvas(smallCanvasRelief)

option add *SmallScrollbar*borderWidth $canvas(smallScrollBd)
option add *SmallScrollbar*background $canvas(smallScrollBg)
option add *SmallScrollbar*relief $canvas(smallScrollRelief)
#option add *Small*Scrollbar*troughColor $canvas(smallBg)
option add *Small*Scrollbar*troughColor $canvas(medBg)
option add *Small*Scrollbar*foreground $canvas(smallScrollBg)
option add *Small*Scrollbar*activeForeground $canvas(bigActiveColor)
option add *Small*Scrollbar*activeBackground $canvas(bigActiveColor)     ;# 4.0


option add *CmdFrame*background $canvas(bigShadingColor)
option add *CmdFrame*Button.foreground $canvas(bigFg)
option add *CmdFrame*Button.background $canvas(bigBg)

set dialog(mainWindow) ".main"
set activeWindow($dialog(mainWindow)) 1
if {[string compare $dialog(mainWindow) "."] != 0} {
  toplevel $dialog(mainWindow) -class Plain
  wm withdraw .
} else {
  set dialog(mainWindow) ""
}

# Close the stderr channel so transient messages are not printed out terminal
close stderr

build_main_window $dialog(mainWindow)
set_wmgr $dialog(mainWindow)

if {$sysinfo(autoUpdate)} { 
    incr sysinfo(DATA_UPDATE_SEQ)

    if { [string compare $sysinfo(cmdButtonUpdAuto) ""] != 0 } {
        $sysinfo(cmdButtonUpdAuto) configure \
                        -background $canvas(bigActiveColor)
    }

    after [expr round($sysinfo(autoUpdateMins) * 60000)] data_auto_update \
                        $sysinfo(DATA_UPDATE_SEQ)
}

