#!/usr/local/bin/wish
# the next line restarts using wish \
#
# Xdiskinfo
# Copyright (c) 1997 Raul Sobon
# This is an Australian made product from the city of Melbourne
#exec wish "$0" "$@"    
#
#
#
proc readsettings {} {
	global disksize diskused diskfree diskpath totvols

	set dfprog [open "|df -kP" r]
	set num 1
    while {[gets $dfprog line] > -1} {
	    set device [lindex $line 0]
		#puts stdout "while... $line"
		if {[expr "{$device} != {Filesystem}"]} then {
			#puts stdout "setting..."
			set disksize($num) [lindex $line 1]
			set diskused($num) [lindex $line 2]
			set diskfree($num) [lindex $line 3]
			set diskpath($num) [lindex $line 5]
			incr num
		}
	}
	set totvols $num
}

proc showFreeSpace {area usedpercent volnum} {
	global disksize diskused diskfree diskpath
	global font sfont

	set enddeg [expr $usedpercent * 3.60]
	set x1 64
	set y1 64
	set x2 260
	set y2 160
	set y1b [expr $y1 + 10]
	set y2b [expr $y2 + 10]

	set dub [expr $diskused($volnum)*1024]
	set dfb [expr $diskfree($volnum)*1024]
	set du [expr $diskused($volnum)/1024]
	set df [expr $diskfree($volnum)/1024]
	set dp $diskpath($volnum)

	$area delete all

	$area create rectangle 10 17 15 23 -fill #0000ff
	$area create rectangle 10 37 15 43 -fill #ff00ff
	$area create text 20 20 -text "used space: \t$dub bytes \t$du MB" -anchor w -font $sfont -fill black
	$area create text 20 40 -text "free space: \t$dfb bytes \t$df MB" -anchor w -font $sfont -fill black
	$area create text 160 200 -text "Drive $dp" -font $sfont -fill black

	if { [expr "{$enddeg} == {360}"] } then {
		$area create oval $x1 $y1b $x2 $y2b -fill darkred
		$area create oval $x1 $y1 $x2 $y2 -fill red
	} else {
		$area create arc $x1 $y1b $x2 $y2b -style pieslice -fill darkblue -start 0 -extent $enddeg
		$area create arc $x1 $y1b $x2 $y2b -style pieslice -fill darkpurple -start 0 -extent [expr -360+$enddeg]
		$area create arc $x1 $y1 $x2 $y2 -style pieslice -fill #0000ff -start 0 -extent $enddeg
		$area create arc $x1 $y1 $x2 $y2 -style pieslice -fill #ff00ff -start 0 -extent [expr -360+$enddeg]
	}
}

proc reUpdate {area volnum} {
	global disksize diskused diskfree diskpath

	readsettings
	set du $diskused($volnum)
	set ds $disksize($volnum)
	#puts stdout "$volnum $du / $ds "
	set thesize [expr $du * 100 / $ds]
	showFreeSpace $area $thesize $volnum
}





#--------------------- START
#
#
global font sfont disksize diskused diskfree diskpath totvols

set font -*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*
set sfont -*-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-*
#tk_setPalette snow3
wm title . "XDiskInfo 1.2 (c) Raul Sobon (AU)"
wm iconname . "xdiskinfo"
set fillsize 90

readsettings

#---- Start GUI -------
#--- bottom buttons
set area .area

frame .buttons -borderwidth 2
pack .buttons -side bottom -fill x -pady 2m
#button .buttons.up		-text "UpDate"			-command "reUpdate $area 1"
button .buttons.cancel	-text "Ok"			-command "exit"
pack .buttons.cancel -side left -expand 1

frame .drives -borderwidth 2
pack .drives -side top -fill x -pady 2m
for {set i 1} {$i < $totvols} {incr i} {
    set x [expr $i+1]
	button .drives.$i	-text $diskpath($i)	-command "reUpdate $area $i"
	pack .drives.$i -side left -expand 1
}

canvas $area -relief sunken -borderwidth 2 -width 320 -height 230
pack $area -side top -fill x

set du $diskused(1)
set ds $disksize(1)
#puts stdout "$volnum $du / $ds "
set thesize [expr $du * 100 / $ds]
showFreeSpace $area $thesize 1

