The `di` program now provides a Tcl extension starting with version 4.39.

2018-4-8: di is now on https://sourceforge.net/projects/diskinfo-di/%|%SourceForge%|%

'''Update 2018-8-12:''' Fixed all bugs found by scan.coverity.com.  Configuration for the Tcl
interface has been improved.

<<br>>
The pre-built packages below include the shared libraries for Linux, Mac Os X, Windows 32-bit and Windows 64-bit.  If you need a shared library for some other system, let me know.

'''Website''': https://gentoo.com/di/%|%https://gentoo.com/di/

'''Current Version''': 4.47 Source: https://sourceforge.net/projects/diskinfo-di/files/latest/download

'''Author''': [bll]

`di` is a highly portable program to display disk information.
It features the ability to display the disk usage in the format you prefer.

With version 4.39, a Tcl extension is now available.
It provides a 'diskspace' command that returns a dictionary with
the filesystem information.%|%

The dictionary returned is nested and keyed by the mount point.
The dictionary keys are: device, fstype, total, free, available, totalinodes, freeinodes, availableinodes, mountoptions, display.

The total, free and available space are returned as bytes.

'display' is returned when the `di` format specifier is not empty.  The data returned is a list of the display items.

Any of the `di` options may be used to change the data returned in the 'display' key.  See the `di` manual page for the complete list.

Example usage:
======
# assuming the diskspace extension is in the same directory as your script...
set ext [info sharedlibextension]
set lfn [file normalize [file join [file dirname [info script]] diskspace$ext]]
load $lfn

set di [diskspace -f {} /] ; # get only the basic information for root filesystem
/ {device /dev/sda1 fstype ext4 total 485893496832 free 269818650624 available 245113102336 totalinodes 30138368 freeinodes 29762805 availableinodes 29762805 mountoptions rw,errors=remount-ro}

set di [diskspace -f {up} /] ; # also get the used space and percentage used.
/ {display {201.2G      50%} device /dev/sda1 fstype ext4 total 485893496832 free 269818736640 available 245113188352 totalinodes 30138368 freeinodes 29762805 availableinodes 29762805 mountoptions rw,errors=remount-ro}
lassign [dict get $di / display] useddisplay percused

set di [diskspace -d 1 -f up /] ; # instead, get the used value in bytes.
/ {display {216074854400        50%} device /dev/sda1 fstype ext4 total 485893496832 free 269818642432 available 245113094144 totalinodes 30138368 freeinodes 29762805 availableinodes 29762805 mountoptions rw,errors=remount-ro}
lassign [dict get $di / display] usedbytes percused

set di [diskspace -f {}] ; # get information on the usual list of filesystems.
======

To build the Tcl extension:

Most systems:
    cd C; make -e tcl-sh

Windows Cygwin:
    cd C; make -e CC=gcc NO_PIE=yes tcl-sh

Windows Msys:
    cd C; make -e WINAPI=T NO_PIE=yes LDFLAGS_SHARED="-static-libgcc" tcl-sh


<<discussion>>Updates
'''Update 2018-4-11:''' The memory bug has been fixed in the Tcl interface, and 
various exit conditions (malloc failures, invalid options, --help, --version) are now 
handled properly.

'''Update 2017-5-23:''' Updated to di version 4.44 (Exabyte overflow bug).

'''Update 2016-8-26:''' The pre-built libraries now include .dll for windows with statically linked libgcc.

'''Update 2016-8-9:''' I now have pre-built shared libraries available for the Tcl extension.<<enddiscussion>>

<<categories>>Package