#!/usr/bin/perl

# (c) gamo@telecable.es, 2016
# It supports no parameters. Just run it and enjoy.
# (c) jesuslozanomosterin@gmail.com, 2026

# revision & update mié 21 ene 2026 12:28:12 CET
use 5.034;                  # a revision, vie 24 may 2024 13:55:30 CEST
use strict;

# Dedicated, with love, to @lauriewired

my $version = 0.03;     # aprox.

if ($ARGV[0] =~ /h/i){
    say "usage: $0";
    say "";
    say "It gives you info about dates and sizes";
    say "on the current directory, AKA '.'";
    exit -1;
}

my $MAGIC = 3;         # 1/3 older files and spare lines (cwd, 2 lines) 

my $tab = " " x 5;           # voy a poner un tabulador generoso. Normal == 4 
                             # va a ser más ya que está inserto en otra gaita

# the 5.034 was the last version non unicode blind, raw byte oriented
# lest's wait... for backcompability 

my (@files, @filesorted, $older, $timeold, $news, $timenew, $sizeM);

# local *DIR;            # huh?

# opendir my $DIR, ".";
# @files = readdir($DIR);
# closedir $DIR;
@files = glob("* .*");
die "Directory empty!" if @files ==0;
my @filesfiles;
for (@files){
    push @filesfiles, $_ unless (-d $_);
}

my $nfiles = scalar( @filesfiles );              # número de ficheros > 0

print `pwd`;
# my %sizeM;
# for (@filesfiles){
#    $sizeM{ $_ } =  (stat( $_ ))[7] / 1024;     # KBytes, could be float but not much    
# }
# my %mtime;
# for (@filesfiles){
#    $mtime{ $_ } = (stat( $_ ))[9];
# }

@filesorted = sort { (stat($a))[9] <=> (stat($b))[9] } @filesfiles;

my $lines = `tput lines`;
chomp $lines;
my $cols = `tput cols`;
chomp $cols;

my $limit //= $nfiles;

# a partir de aquí no se organiza nada si $nfiles <= $lines
# (el problema es que el directorio no tiene suficientes ficheros,
# pero ya añadire un tal y un cual para hacer más versiones) 

if ( $nfiles + $MAGIC > $lines ){
    $limit = int($lines/$MAGIC) - 3; # 3 lineas de embellecimiento
    $limit = 1 if $limit < 0;
}
# $limit es $nfiles en un tercio y 2 tercios para ficheros recientes
# aplicado a $lines. Más me vale que quede bonito :-)

line();
my $sizeKB;
for my $i (1..$limit){
    $older = $filesorted[$i-1];
    $timeold = localtime( (stat( $older ))[9] );       # realmente no hay que complicarse mucho con el formato
    $sizeKB = (stat( $older ))[7] / 1024;
    if ($filesorted[$i-1] eq '..'){
	say "File #$i: $tab Parent_directory $tab $timeold";
	next;
    }
    say "File #$i: $tab $older $tab $timeold $tab ", align( $sizeKB ), " KB";
    goto end_of_files unless $filesorted[$i];                   # unneccessary  
}

line();
for ( my $i = scalar(@filesorted) - 2 * $limit - $MAGIC;  $i < @filesorted;  $i++)  {
    $news = $filesorted[$i];
    $timenew = localtime ( (stat( $news ))[9] );        # ditto.
    $sizeKB = (stat( $news ))[7] /1024;
    say "File #$i: $tab $news $tab $timenew $tab ", align( $sizeKB ), " KB";
}

end_of_files:

exit 3;

sub align {
    my $number = shift;
    my $string = " " x (18-length($number));
    my $string .= sprintf ("%.02f", $number);
    return $string;
}

sub line{
    my $c = ($cols < 80) ? $cols : 80; 
    say "-" x $c, "";
}
__END__
INSTALL: + (decent shell sh)
  chmod +x agedir
  sudo cp agedir /usr/local/bin/

Nota: próximo problema de tiempo, en el año 30 y pico para los ordenadores de menos bits 
  o que emulen menos bits o lo que sea. La aritmética no sabe de números pequeños o grandes
  y si son naturales y positivos, es chupao

