#!/usr/bin/perl -w
#!perl -w          
# remd: liste le contenu des repertoires désiré dans un fichier rep.html et un rep.dat.  *
# requier le module FrDate.pm pour l'affichage de (la date et l'heure en français) utf8  *
# écris par Alain Adelmar aadelmar@numericable.fr peut fonctionner sur tout OS (Lx, M$)  * 
# Multi environement (Linux, MicroSoft, msys, cygwin)_ vers:2.1.0 (22/03/2004-26/02/10   *
# Usage: rep2html [-c] [repertoire]   -c pour complet y compris les rem et logs          *
# rep2html                        pour avoir le repertoire courant (defaut) :            *
# ------------------écrit par alain Adelmar -------------------------------------------  *
# Enjoyed, that's a aadelmar's script, fun free and french  02/2010  "hé, ouai mon pote" *
#----------------------------------------------------------------------------------------* 

use Cwd;
my $dir = cwd;

# traitement du temps pour date et heure en français
(my $sec,my $min,my $heure,my $mjour,my $mois,my $annee,my $sjour,my $ajour,my $isdst) =  localtime(time);
my @lssjour = qw( Dim Lun Mar Mer Jeu Ven Sam);
my @lssmois = qw ( Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre );

my $french_date_now = "$lssjour[$sjour] $mjour $lssmois[$mois] " . ($annee+=1900) . " - $heure:$min:$sec";


my $vide = " " x 30;
my $x ="*-" x 25;
my $tiret = "-" x50;
my $nlr = my $gnus = 0;
my $al = "\t=== A_l_a_i_n -\/\/- A_d_e_l_m_a_r ===      |";
my $lbl = "$x\n$al\n$x\n\n";
my $mi = "<hr\>alain Adelmar <a href=\"mailto:aadelmar\@free.fr\"\>aadelmar\@free.fr<\/a\>\n";
my $argv = my $d = "";



if (@ARGV) {
  if($ARGV[0] =~ /^-/) {
    s/-()/$1/;
    $argv = $1;
    $d = $ARGV[1];
    print "$x\n$al\n\n$x\n\n";
  }
  else {
    $d = $ARGV[0];
    print "$x\n$al\n\n$x\n\n";
  }
}
else {
  print 
  print "usage: rep2html [répértoire] \n";
  print "Indiquez le dossier a traiter:\n";
  chomp($d = <STDIN>);
}

  
format STDOUT_TOP =
Page @<<
$%

 Fichier                     Date du dernier changement
=====================       ===========================
.


if ($d eq "") {
  $d = $dir;
}
else {
  unless (-d $d) {
    print "Entrez un chemin de fichier valide:\n";
    $d = <STDIN>;
    chomp $d;
  }
}

if ($^O=~ /[msys|cygwin|gnu]$/) {
  $gnus++;
  print "this is a real gnu OS, congratulation\n";
}
elsif ($ENV{"PATH"}=~ /^\//) {
  $gnus++;
  print "this is a real gnu OS, congratulation\n";
}

my @gnul = ("\\", "\/");
my $gnup = $gnul[$gnus];
my @ds = split(/$gnup/, $d);
my $ds = pop @ds;


my $fout = "rep_" . "$ds" . ".html";
&gnotise($fout);
my $fout_dat = "rep_" . "$ds" . ".dat";
&gnotise($fout_dat);

open OUT, ">$fout" or die "Ouverture du fichier rep impossible $!";
print OUT "<HTML\>\n\t<head\>\n\t\t<meta http-equiv=\"Content-Type\" content=\"text\/html;
charset=utf8\"\>\n\t\t<title\>liste d&eacute;taill&eacute; de $d<\/title\>\n\t\t<meta name=\"author\" content=\"adelmar alain et
Perl\"\>\n\t<\/head\>\n<body\><h1\>Liste des fichiers de $d<\/h1\><br>\n";
print OUT "Edit&eacute; automatiquement par le script rep2html\.pl le: " . "$fr_date_now" . "\nn\'eff&eacute;ctuez pas
de modifications (SVP)\.\n<hr\>\n";
open OUTDAT, ">$fout_dat" or die "Screugneugneu $fout_dat ne veux pas souvrir $!";
print OUTDAT "Edité automatiquement par le script rep\.pl le: " . "$fr_date_now" . "\nn\'efféctuez pas de modifications (SVP)\.\n";


opendir R, "$d" or die "Ouverture repertoire impossible $!";
$opt_date_file = 1;
foreach $file (sort readdir R){
  my $u++;
  next if ($file =~ /^\./);
  $fr_date_file = &datefile($file);
  $line = ":$file\n\t$fr_date_file\n";
  if(-d $file) {
    my $reptmp = "d";
    print OUT "<img SRC=\"folder.jpg\"\>&nbsp;&nbsp;<b\><a href=\"$d$gnup$file\"\>$file<\/a\><\/b\><br\><div align=center\>$french_date_file<\/div\><br\>\n";
    write;
    print OUTDAT "$reptmp $line";

  }
  elsif(-f $file) {
    print OUT "<img SRC=\"file.jpg\"\>&nbsp;&nbsp;<a href=\"$d$gnup$file\"\>$file<\/a\><br\><div align=center\>$fr_date_file<\/div\><br\>\n";
    #damned avec remd: je pourrai carrement afficher le commentaire à coté du liens (but no alias sur M$)
    $reptmp = "f";
    $rem = &remdthat($file);
    write;
    if ($argv eq "c") {
      print OUTDAT "$reptmp $line\n$rem\n";
    }
    print OUTDAT "$reptmp $line";
  }
  else {
    print OUT "<img SRC=\"file.jpg\"\>&nbsp;&nbsp;<a href=\"$d$gnup$file\"\>$file<\/a\><br\><div align=center\>$fr_date_file<\/div\><br\>\n";
    #damned avec remd: je pourrai carrement afficher le commentaire à coté du liens (but no alias sur M$)
    $reptmp = "heu";
    $rem = &remdthat($file);
    write;
    if ($argv eq "c") {
      print OUTDAT "$reptmp $line\t$rem\n";
    }
    print OUTDAT "$reptmp $line";
  }
}       
closedir R or die "Fermeture du repertoire impossible $!";

print OUTDAT "\n$lbl\n";
close OUTDAT || die "Comme dirai tonton jo, Fartoi encoula granda connasse, 30000 fois saloperie ce ptain de $fout_dat
ne veut pas ce fermer $!";
print OUT "$mi\n";
close OUT or die "Fermeture impossible bordel $!";

print "nombre de fichier traite $u\n";
print "\n\nUn fichier $fout a été créé ainsi qu'un fichier $fout_dat\nBonne journée\nalain\n";

sub gnotise($fili) {
  my($fili)= @_;
  
  if (-e $fili) {
    $arch = "$fili" . "~";
    rename $fili, $arch or die "impossible de faire comme cela $!";
  }
}

sub datefile {
  
  ($mode = 8) if ($mode=~ /^a/);
  ($mode = 9) if ($mode=~ /^m/);
  ($mode = 10) if ($mode=~ /^c/);
  print "mode vaut : $mode\n";
  $datenum = ((stat($file))[$mode]);
  print "$datenum\n";
  (my $sec,my $min,my $heure,my $mjour,my $mois,my $annee,my $sjour,my $ajour,my $isdst) =  (localtime($datenum));
  my $fr_date_file = "$lssjour[$sjour] $mjour $lssmois[$mois] " . ($annee+=1900) . " - $heure:$min:$sec";
  return $fr_date_file;
}

sub remdthat {
  my($file)=@_;
  (@contenu, @remd)= "";
  my $filnm = "$d$gnup$file";

  open F, "$filnm" or die "Ouverture de $file impossible $!";
  @contenu = F;
  my $nlr = 0;
  foreach $l(@contenu) {
    if ($nlr >= 1) {
      chomp $l;
      push @remd, $l;
      goto LABELLE if ($nlr == 1);
      $nlr--;
    }
    elsif ($l =~ /remd:/) {
      chomp $l;
      push @remd, $l;
      print "ok pour $l\n";
      $nlr = 5;       # nombre de lignes de commantaires +1, changer le nombres ici
    }
  }
 LABELLE:close F || die "Fermeture de $file compromise $!";
  $rem = join("\n\t", @remd);
  return $rem;
}


format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<<<<<<     @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$file, $french_date_file
.



END;
