#!/bin/sh # the next line restarts using wish \ exec wish "$0" "$@" # TkWsinfo (Version 0.2) # # Copyright (C) 2000 by T.Sato # # http://member.nifty.ne.jp/tsato/tkdeskset/ # # 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 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. set program_name "TkWsinfo" set title "Workstation Information (Version 0.2)" set label_font "-*-lucida-bold-r-normal-*-14-*-*-*-*-*-*-*" set value_font "-*-lucida-medium-r-normal-*-14-*-*-*-*-*-*-*" wm title . $title wm iconname . $program_name set tmpfile "/tmp/tkwsinfo.[pid]" set scale_width 250 set lang "C" if { ! [ catch { kanji code "abc" } ] } { catch { set lang $env(LANG) } catch { set lang $env(LC_ALL) } catch { set lang $env(LC_MESSAGES) } } set env(LC_MESSAGES) "C" proc gettext msg { global lang if [ regexp {^ja_|^japanese|^ja$} $lang junk ] { switch -glob $msg { "Workstation Name:" \ { return "ワークステーション名:" } "Workstation Type:" \ { return "ワークステーションタイプ:" } "Host ID:" \ { return "ホスト ID:" } "Internet Address:" \ { return "インターネット・アドレス:" } "Network Domain:" \ { return "ネットワーク・ドメイン:" } "Physical Memory (RAM):" \ { return "物理メモリ (RAM):" } "Virtual Memory (Swap):" \ { return "仮想メモリ (Swap):" } "Virtual Memory In Use:" \ { return "使用中の仮想メモリ:" } "Operating System:" \ { return "オペレーティング・システム:" } "Window System:" \ { return "ウィンドウ・システム:" } "Megabytes" \ { return "メガバイト" } default \ { return $msg } } } return $msg } proc vertical_space {} { global row incr row label .top.$row grid .top.$row -row $row } set row 0 proc show_item key { global label value row global label_font value_font incr row label .top.${key}_l -font $label_font -text "[ gettext $label($key) ] " grid .top.${key}_l -sticky e -row $row if { $value($key) != "" } { label .top.${key}_v -font $value_font -text $value($key) grid .top.${key}_v -sticky w -row $row -column 1 } } proc get_memory_usage {} { global ram_total ram_used swap_total swap_used set ram_total 0 set ram_used 0 set swap_total 0 set swap_used 0 catch { set f [ open "| free" r ] while { 0 <= [ gets $f line ] } { scan $line "Mem: %d %d" ram_total ram_used scan $line "Swap: %d %d" swap_total swap_used } close $f incr swap_total $ram_total incr swap_used $ram_used } if { $swap_total <= 0 } { catch { set f [ open "| /usr/sbin/prtconf" r ] while { 0 <= [ gets $f line ] } { regexp {Memory size: *([0-9]+) Mega} $line junk ram_total } close $f set ram_total [ expr $ram_total * 1024 ] } catch { set f [ open "| /usr/sbin/swap -s" r ] while { 0 <= [ gets $f line ] } { regexp {([0-9]+)k +used} $line junk swap_used regexp {([0-9]+)k +available} $line junk swap_free } set swap_total [ expr $swap_used + $swap_free ] close $f } } } proc show_memory_usage {} { global swap_total swap_used global scale_width get_memory_usage if { 0 < $swap_total } { set usage [ expr $scale_width * $swap_used / $swap_total ] } else { set usage $scale_width } .top.mem_use_v.filled configure -width $usage .top.mem_use_v.blank configure -width [ expr $scale_width - $usage ] .top.mem_use_v.value configure \ -text " [ expr $usage * 100 / $scale_width ]%" after 1000 { show_memory_usage } } set label(wsname) "Workstation Name:" set value(wsname) [ exec hostname ] set label(wstype) "Workstation Type:" set value(wstype) [ exec uname -mp ] set label(hostid) "Host ID:" set value(hostid) [ gettext "unknown" ] catch { set value(hostid) [ exec hostid ] } set label(address) "Internet Address:" set value(address) "" catch { set f [ open "| /sbin/ifconfig -a" r ] while { 0 <= [ gets $f line ] } { if { [ regexp {[^a-zA-Z](inet|addr|inet addr)[: ] *([0-9.]+)} $line junk junk adrs ] \ && $adrs != "127.0.0.1" } { if { $value(address) != "" } { append value(address) ", " } append value(address) $adrs } } close $f } set label(domain) "Network Domain:" set value(domain) [ exec domainname ] get_memory_usage set label(ram) "Physical Memory (RAM):" if { 0 < $ram_total } { set value(ram) "[ expr $ram_total / 1024 ] [ gettext Megabytes ]" } else { set value(ram) "?" } set label(swap) "Virtual Memory (Swap):" if { 0 < $swap_total } { set value(swap) "[ expr $swap_total / 1024 ] [ gettext Megabytes ]" } else { set value(swap) "?" } set label(mem_use) "Virtual Memory In Use:" set value(mem_use) "" set label(os) "Operating System:" set value(os) [ exec uname -srm ] set label(win) "Window System:" set value(win) "" catch { exec X -version 2> $tmpfile set f [ open $tmpfile r ] while { 0 <= [ gets $f line ] } { if { $line != "" } { set value(win) $line break } } close $f } if [ file exists $tmpfile ] { exec rm $tmpfile } if { $value(win) == "" } { set f [ open "| xdpyinfo" r ] while { 0 <= [ gets $f line ] } { regexp {^vendor string: *(.*)$} $line junk value(win) regexp {^vendor release number: *(.*)$} $line junk vendor_release } close $f if { $vendor_release != "" } { set value(win) "$value(win) (release $vendor_release)" } } # display them frame .top -borderwidth 10 pack .top show_item wsname show_item wstype vertical_space show_item hostid show_item address show_item domain vertical_space show_item ram show_item swap show_item mem_use frame .top.mem_use_v frame .top.mem_use_v.scale -relief sunken -bd 2 frame .top.mem_use_v.filled -bg gray30 -width $scale_width -height 8 frame .top.mem_use_v.blank -width 0 label .top.mem_use_v.value -font $value_font pack .top.mem_use_v pack .top.mem_use_v.scale .top.mem_use_v.value -side left pack .top.mem_use_v.filled .top.mem_use_v.blank -side left -in .top.mem_use_v.scale grid .top.mem_use_v -sticky w -row $row -column 1 vertical_space show_item os show_item win show_memory_usage