'''FreeSpace -- print free space on disk

- Uses stat, works on Linux and probably other Unices
- Arg is a path in the filesystem to be tested
- With no arg, uses '/'

Written by Michael Ashton <data@ieee.org>
for MoinMoin 1.3.

Public domain -- written 17 August 2005
'''

import commands
Dependencies=[]

def gigfmt(n):
	n=float(n)
	if (n>(1<<30)):
		n=n/(1<<30)
		suf="GiB"
	elif (n>(1<<20)):
		n=n/(1<<20)
		suf="MiB"
	elif (n>(1<<10)):
		n=n/(1<<10)
		suf="KiB"
	else:
		suf="B"
	return "%.1f%s"%(n,suf)

def execute(macro,args):
	if not args is None and len(args)>0:
			path=str(args)
	else:
		path="/"
	res=commands.getstatusoutput(r"stat -f -c '(%f,%b,%s)' "+path)
	if res[0]:
		ret="(result "+str(res[0])+": "+res[1]+")"
	else:
		fsl=eval(res[1])
		blksize=fsl[2]
		freeblk=fsl[0]
		totblk=fsl[1]
		freebytes=freeblk*blksize
		totbytes=totblk*blksize
		ret=gigfmt(freebytes)+" of "+gigfmt(totbytes)
	return ret

if __name__=="__main__":
	import sys
	#print gigfmt(int(sys.argv[1]))
	if len(sys.argv)>1:
		print execute(0,(sys.argv[1],))
	else:
		print execute(0,())
