#!/usr/bin/perl -w
# remd: script permettant de lister un repertoire (pour Linux) alain adelmar.
# un de mes premiers script que j'ai remanier totalement avec DateFrench,     *
# une incrementation de fout, des argument de façon à afficher soit la date de*
# creation (1), de modif (2) et d'accés(3). L'utilisateur entre directement la*
# valeur opt_date_file. Par defaut c'est les trois dates.    alain Adelmar    *
# usage: dir.pl -[1~3] [nom_complet_du_repertoire]                            *
# les options sont donc un chiffre entre 1 et 3 pour lister:                  *
#  -1  pour lister les fichiers avec leurs date de creation                   *
#  -2   "     "            "                 "  de dernière modification      *
#  -3   "     "            "                 "  de dernier accés              *
# par defaut se sont les trois dates qui sont affichées.                      *
# script ecrit par: alain Adelmar                                             *
# fonctionne trop bien sur Linux      v:1.2               08/mars/2009  utf8  *
#-----------------------------------------------------------------------------*
#$id 
$version = "1.1";
$progman = "Alain Adelmar";

use DateFrench;
$format_affichage = 21;
$french_date_now = maintenant($format_affichage);
$lbl = "éditer par " . $0 . " le  $french_date_now\nécrit par $progman\n";
print "$lbl";

$ct = $mt = $vut = "";

# traitement argument - fichier a traiter et verif validité
if (@ARGV) {
  if ($ARGV[0] =~ /^-/) {
    $ARGV[0] =~ s/-()/($1)/;
    ($argv = $ARGV[0]);   # assigne $argv
#    ($argv = "b") if ($ARGV[0]=~ /^b/);   # pour b pour binaire
#    ($argv = "u") if ($ARGV[0]=~ /^u/);   # pour u
#    ($argv = "l") if ($ARGV[0]=~ /^l/);   # pour latin1 => utf8
#    ($argv = "o") if ($ARGV[0]=~ /^o/);   # pour output (c.a.d: fichier differant)
    if($argv=~ /o/) {
        if ($ARGV[2] ne "") {
            $fout = $ARGV[2];
	    $rep = $ARGV[1];
	    print "dir vaut $rep\n";
	    &controlethis;
	    print "rep vaut $rep (source)\nfout vaut $fout (cible)\net est considerer comme argv2\n";
        }
        else {
            print "si vous prennez l option -o il faut indiquer le fichier cible\npar defaut sorti_" .  $ARGV[1] . "\n";
            print "usage: $0 [-opt] [rep_source] ([nom_de_la_cible] pour option -o)\n";
            chomp($fout = <STDIN>);
        }
    }
    if ($ARGV[1] ne "") {
      $rep = $ARGV[1];
      print "dir vaut $rep\n";
      &controlethis;
    }
  }
  else {
    $rep = $ARGV[0];
    print "dir vaut $rep\n";
    &controlethis;
  }
}
else {
  print "$lx\nusage: dir.pl [-opt] [rep_a_traiter] [fichier_sortie]\n(made by $moi)\n";
  #---------demander quel fichier traiter et verifier si il existe
  print "$lx\n";
  print "Indiquez le fichier a traiter:\n";
  chomp($rep =<STDIN>);
  print "rep vaut $rep\n";
  &controlethis;
}


sub controlethis {

  unless(-d $rep) {
    print "le repertoire $rep n'existe pas, veuillez entrer un path correct\n";
    $rep = <STDIN>;
    chomp $rep;
  }

  @lssrep = split(/\//, $rep);
  print "@lssrep\n";

  # $rep = pop @lssrep;           # nom du dernier dossier seul mais j'en ai pas besoin
  $rootfout = join('_', @lssrep);   # nom du fichier de sorti comme: home_alain_temp
  $rootfout =~ s/^-()/$1/;
  #(print "super\n") if (substr($rootfout,0) eq "_");
  print "$rootfout\n";

}

opendir(REP, "$rep") or die "Ouverture du rep $rep impossible $!";
@files = (sort readdir REP);
closedir REP;

unless ($fout) {
  $fout = "$rootfout" . "\.log";
}
while (-e $fout) {
    $z++;
    $fout = "$rootfout" . "_$z" . "\.log";
    print "fout vaut maintenant $fout\n";
  }


open(STDOUT, ">:utf8", "$fout") or die "Ouverture de dir_x.log impossible $!";
$tagini = "récupération du répértoire $rep par " . $0 . "\nversion: $version ecrit par $progman\nFait le $french_date_now \n\n";
print STDOUT "$tagini\n";



format STDOUT_TOP =
Page @ << 
$% 

 Fichier               Dernier  Access  Dernière  Modifs  Changement inode  Taille
===================   ================  ================  ================  =========
.



foreach $filename(@files) {
  $format_affichage = 22;
  $file = "$rep\/$filename";
  ($filename =~ tr/a-z/A-Z/) if (-d $filename);
  $fr_date_file = datefichier($format_affichage, $opt_date_file, $file);
  # print "fichier file vaut $file " . $fr_date_file . "\n";
  $opt_date_file= 1;
  $fr_date_file = datefichier($format_affichage, $opt_date_file, $file);
  $ct = $fr_date_file;
  $opt_date_file = 2;
  $fr_date_file = datefichier($format_affichage, $opt_date_file, $file);
  $mt = $fr_date_file;
  $opt_date_file = 3;
  $fr_date_file = datefichier($format_affichage, $opt_date_file, $file);
  $vut = $fr_date_file;
  $taille = (stat $file)[7];
  write STDOUT;
  #print "$filename \n";
}

$tagout = "\n\taadelmar\@free.fr\n";
print STDOUT $tagout;
close STDOUT || die "fermeture de $fout imposs $!";


format STDOUT =
@<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<  @<<<<<<<<<
$filename, $ct, $mt, $vut, $taille
.

# parfait

END;
