#!/usr/bin/perl 

if (scalar @ARGV == 0 ) { 
  open(FILE,"-|") || exec( "/usr/bin/du","-sk",".");
  }
else {
  open(FILE,"-|") || exec( "/usr/bin/du","-sk",@ARGV);
  }
while (<FILE>) { push @lista,$_;  }
close FILE;

@lista= sort {$a<=>$b} @lista;

$bytes=0;
if (scalar @lista >1) {
  for (@lista) {
    chomp;
    ($bytes,$nom)=split " ",$_,2;
    $total+=$bytes;
    }
  push @lista,"$total ------Total";
  }

for (@lista) {
  chomp;
  ($bytes,$nom)=split " ",$_,2;

  # ---- Version M 70.282.540
  $tag=" "; $bytestot=$bytes;
  if    ($bytestot >1000000000) { $bytestot= $bytestot/1000000000; $tag="T"; }
  elsif ($bytestot >1000000)    { $bytestot= $bytestot/1000000;    $tag="G"; }
  elsif ($bytestot >1000)       { $bytestot= $bytestot/1000;       $tag="M"; }

  @bytes=split //,$bytes;  @bytesrev=();
  for ($i=$#bytes, $j=0; $i>=0; $i--, $j++) { 
    if ($j % 3 == 0 and $j!=0) { push @bytesrev, "."; }
    push @bytesrev, $bytes[$i]; 
    }
  $bytes=join "",reverse @bytesrev;  ;
  printf "$tag %12s  $nom\n",$bytes;
  
  # ---- Version 70M
  #$tag=" ";
  #if    ($bytes >1000000000) { $bytes= $bytes/1000000000; $tag="T"; }
  #elsif ($bytes >1000000)    { $bytes= $bytes/1000000;    $tag="G"; }
  #elsif ($bytes >1000)       { $bytes= $bytes/1000;       $tag="M"; }
  #
  #@miles=split /([0-9]{3})/,$bytes;
  #print $bytes,"=",join '-',@miles;
  #$bytes=join '.',@miles;
  # printf "%15s$tag $nom\n",$bytes;

  ## ----- Version 1g 067m 804k
  #$bytesorg=$bytes;
  #$teras=$gigas=$megas=$kilos='';  $t=$m=$g="";
  #
  #if ($bytes >1000) { 
  #  $kilos= $bytes % 1000; $kilos=sprintf "%03dk",$kilos;
  #  $bytes=int $bytes/1000;
  #  
  #  if ($bytes >1000) { 
  #    $megas= $bytes % 1000; $megas=sprintf "%03dm",$megas;
  #    $bytes=int $bytes/1000;
  #
  #    if ($bytes >1000) { 
  #      $gigas= $bytes % 1000; $gigas=sprintf "%03dg",$gigas;
  #      $bytes=int $bytes/1000;
  #
  #      if ($bytes >1000) { 
  #        # $teras= $bytes % 1000; $megas=sprintf "%03dt",$teras;
  #        $teras =sprintf "%dt",$bytes;  # Es el ultimo
  #        } 
  #      else { $teras=sprintf "%3dt",$bytes; }
  #      }
  #    else { $gigas=sprintf "%3dg",$bytes; }
  #    }
  #  else { $megas=sprintf "%3dm",$bytes; }
  #  }
  #else { $kilos=sprintf "%3dk",$bytes; }
  #
  #$bytes=sprintf "$teras $gigas $megas $kilos";
  #$bytes =~ s/^0*//;
  # printf "%15s$tag $nom\n",$bytes;

  }

