#!/usr/bin/perl -w
#!perl -w          
# remd: Créera un cartouche menu servant à accéder au fichiers alphabétiquement. Dans un *
# premier temps il enregistre un fichier menu.html qui contiendra ce cartouche puis il   *
# listera le contenu d'un repertoires de publication, classe les fichiers meta en les    *
# sélectionnant alphabétiquement et créé des listes comme :liste_a.html liste_b.html ... *
# (Il y aura plusieurs possibilités de tri sur les versions à venir(par nature)).        *
# Dans ces listes  le noms  des  fichiers apparaitra  sous forme de liens ainsi que leur * 
# taille leur date de publication et un petit topo de 2-3 lignes pour les définir (quoi) *
#                                                                                        *
# note: Ce script ne touche pas à votre repertoire de publication il ne fait que lire les*
# noms de fichiers et créé un menu et des listes, sans jamais écraser quoique ce soit.   *
# ---------------------------------------------------------------------------------utf8  *
# écris par Alain Adelmar aadelmar@numericable.fr peut fonctionner sur tout OS (Lx, M$)  * 
# Multi environement (Linux, MicroSoft, msys, cygwin)   _   vers:1.0 (25/06/11)          *
# Usage: mk-menu-alpha-html.pl [-c] [repertoire_de_publication]                          *
# 		-c complet incorpore aussi les images dans les listes                              *
#			-r pour remd: ajoute quelques lignes explicatives                                  *
# mk-menu-alpha-html.pl           pour traiter le repertoire courant (defaut) :          *
# ------------------écrit par alain Adelmar -------------------------------------------  *
# Enjoyed, that's a aadelmar's script, fun free and french  06/2011  "hé, ouai mon pote" *
#----------------------------------------------------------------------------------------* 

use strict;
use Cwd;
my $dir = cwd;
#use File::stat;

# 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 $fr_date_file = "";      # initialisation de date fichier par &datefile
#my $model = "ctime";     # peut être mis à a pour acces| c pour change | m pour modif
my $mode = 9;

my $vers = '2.6';
my $vide = " " x 30;
my $x ="*-" x 25;
my $tiret = "-" x50;
my $nlr = my $gnus = my $u = my $datenum = 0;
my $al = "\t=== A_l_a_i_n -\/\/- A_d_e_l_m_a_r ===      |";
my $lbl = "$x\n$al\n\t$0:\t$vers\n$x\n\n";
my $mi = "<hr\>alain Adelmar <a href=\"mailto:aadelmar\@free.fr\"\>aadelmar\@free.fr<\/a\>\n";
my $rem = my $reptmp = my $l = my $f = "";
my $argv = my $file = "";
my $d = "";			# repertoire (de travail) entrer par l'utilisateur
my $rpath_fliste = "";	# adresse reelle des listes
my @contenu = my @remd = "";
my $fr_datenum_file= "";
my $line = my $filename = my $filelbl = "";
my $cj = my $ptaille = my $format_d = "";
my $taille = 0;
my $fout = "";
my $fout_dat = my $fliste = my $lettre = "";
my $menu_debut = "&nbsp;" . '<table BORDER COLS=3 WIDTH="100%" >' . "<tr\>\n<td\><a NAME=\"menu_top\"\>" . '</a><table BORDER COLS=7 WIDTH="100%" >' . "\n<tr\>\n";



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

  
format STDOUT_TOP =
Page @<<
$%

 Fichier                       Taille (oc)      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 $slash = $gnul[$gnus];
my @ds = split(/$slash/, $d);
my $ds = pop @ds;

my $ext_html = ".html";
my $ext_dat = ".dat";
$fout = "rep_" . "$ds$ext_html";
&gnotise($fout);
$fout_dat = "rep_" . "$ds$ext_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<link rel=\"stylesheet\""
. " type=\"text\/css\" href=\"style.css\"\>\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 $0 le: " . $french_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 $0 le: $french_date_now\nn\'efféctuez pas de modifications (SVP)\.\n";

my $menu = "$d$slash" . "menu.html";
unless (-e $menu) {
open MENU, ">$menu" or die "Ouverture de $menu impossible $!";
# création du cartouche
# entete
print MENU '<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">' . "\n";
print MENU '  <html>' . "\n";
print MENU '    <head>' . "\n";
print MENU '      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">' . "\n";
print MENU '      <title>menu cartouche perso</title>' . "\n";
print MENU '      <meta name="Author" content="Adelmar alain">' . "\n";
print MENU '      <meta name="GENERATOR" content="Mozilla/4.7 [fr] (Linux) [Netscape]">' . "\n";
print MENU '      <link href="style.css" type="text/css" rel="stylesheet">' . "\n";
print MENU '  </head>' . "\n";
print MENU '  <body>' . "\n";
print MENU '  <ul>' . "\n";
print MENU '  <li class="mu"><a class="neolink" href="base_conaissances_perso.html">Pr&eacute;c&eacute;dant</a></li>' . "\n";
print MENU '  <li class="mu"><a class="neolink" href="liste_a.html">Suivant</a></li>' . "\n";
print MENU '  <li class="mu"><a class="neolink" href="index.html">Index</a></li>' . "\n";
print MENU '  <li class="mu"><a class="neolink" href="menu.html#menu_top">Menu</a></li>' . "\n";
print MENU '  <li class="mu"><a class="neolink" href="mailto:aadelmar@numericable.fr">Me Joindre</a></li>' . "\n";
print MENU '  </ul>' . "\n";
print MENU '  <hr>' . "\n";
print MENU '  <table BORDER COLS=3 WIDTH="100%" STYLE="background-image: url(bkgnd15.gif)">' . "\n";
print MENU '  <tr>' . "\n";
print MENU '  <td><a NAME="menu_top"></a>' . "\n";
print MENU '  <table BORDER COLS=7 WIDTH="100%" >' . "\n";
print MENU '  <tr>' . "\n";

# mettre boucle de a-z
my $renvoi = 0;
my @az = ("a".."z");
foreach (@az) {
	if($renvoi <= 6) {
	  print MENU '	<td><font face="Georgia" size=+1><a href="liste_' . $_ . '.html#a_top"><center>' . $_ . '</center></a></font></td>' . "\n";
	  $renvoi++;
	}
	else {
		print MENU '	</tr>' . "\n\n\t" . '  <tr>' . "\n";
		$renvoi = 0;
		print MENU '	<td><font face="Georgia" size=+1><a href="liste_' . $_ . '.html#a_top"><center>' . $_ . '</center></a></font></td>' . "\n";
	}
}
print MENU '	</tr>' . "\n\n\t" . '  </table>' . "\n\n";
print MENU '  <center><a NAME="recherche"></a><FONT COLOR="#FF0000">Recherche</FONT></center>' . "\n";  
print MENU '  </td>' . "\n\n" . '  <td>' . "\n\n";
print MENU '  <center><img SRC="aanum_sigle.gif" height=107 width=117></center>' . "\n";
print MENU '  </td>' . "\n";
print MENU '  <td>&nbsp;&nbsp;  Adelmar alain&nbsp;&nbsp;' . "\n";
print MENU '  <br>&nbsp;&nbsp;  <a href="mailto:aadelmar@numericable.fr">aadelmar@numericable.fr</a>' . "\n";
print MENU '  <br>&nbsp;&nbsp;  6 rue de Tunis 33600 Pessac&nbsp;France' . "\n";
print MENU '  <br>&nbsp;&nbsp;  <a href="http://perso-numericable.fr/aadelmar/">http://perso.numericable.fr/aadelmar/</a>' . "\n";
print MENU '  <br>&nbsp;&nbsp;  <a href="http://aadelmar.free.fr/">http://aadelmar.free.fr</a></td>' . "\n";
print MENU '  </tr>' . "\n" . '  <tr>' . "\n" . '  <td>' . "\n";
print MENU '  <center><a NAME="cmd_lx_tab"></a><a href="bash.html#bash_top">Commandes Linux</a></center>' . "\n";
print MENU '  </td>' . "\n\n" . '  <td>' . "\n";
print MENU '  <center><a NAME="dico_informgnl_tab"></a>Dico Informatique G&eacute;n&eacute;rale</center>' . "\n";
print MENU '  </td>' . "\n\n" . '  <td>' . "\n";
print MENU '  <center><a NAME="plan_site_tab"></a>Plan du Site</center>' . "\n";
print MENU '  </td>' . "\n" . '  </tr>' . "\n" . '  </table>' . "\n";
print MENU '  <dl>' . "\n";

close MENU or die "Fermeture de $file impossible $!";
}

#--------------------------------------------------------------------a la


opendir R, "$d" or die "Ouverture repertoire impossible $!";
$mode = 8;

foreach $file (sort readdir R){
	next if ($file =~ /^\./);
  $filelbl = $filename = $file;

 # print "filename vaut $filename\n";
  $file ="$d$slash$filename";
 # print "file vaut $file\n";
  $u++;
  our $format_d = 4;
  $fr_date_file = datefinefile($file, $mode, $format_d);

  $fr_date_file = datefinefile($file);

  if(-d $file) {
    my $reptmp = "d";
    print OUT "<img SRC=\"folder.jpg\"\>&nbsp;&nbsp;<b\><a href=\"$filename\"\>$file<\/a\><\/b\><br\><div align=center\>$fr_date_file<\/div\><br\>\n";
    #------------------------
		$lettre= substr($filename,0,1);	
		if($lettre=~ /\d/) {
			$lettre = "0-9";
			}
		elsif($lettre=~ /\w/) {
			$lettre= lc $lettre;
			}
		$fliste = "liste_$lettre.html";
		# $rpath_fliste = adresse réelle de $fliste
		# tant qu'a faire placer les liste dans le rep voulu
		$rpath_fliste = "$d$slash$fliste";
		if(&jette_un_oeil($rpath_fliste)== 1) {
			print FL "<img SRC=\"folder.jpg\"\>&nbsp;&nbsp;<b\><a href=\"$filename\"\>$file<\/a\><\/b\><br\><div align=center\>$fr_date_file<\/div\><br\>\n";
			#close FL || die "Fermeture de $fliste impossible $!";
			}
    
    #--------------------------
    write;
    print OUTDAT "$reptmp $line";
  }
  elsif(-f $file) {
    #damned avec remd: je pourrai carrement afficher le commentaire à coté du liens (but no alias sur M$)
    $reptmp = "f";
    $taille = (stat($file))[7];
    if ($taille >= 1000000) {
			$taille = $taille/1000000;
			$ptaille = "$taille (Mo)";
			}
    elsif ($taille >= 1000) {
			$taille = $taille/1000;
			$ptaille = "$taille (Koctets)";
			}
		else {
			$ptaille = "$taille (Octets)";
			}
		
		print OUT "<img SRC=\"file.jpg\"\>&nbsp;&nbsp;<a href=\"$filename\"\>$filename<\/a\><br\><div align=center\>$ptaille --- $fr_date_file<\/div\><br\>\n";	
    # ajout dans les listes des noms de fichier (qui controle l'existance fichier et nom de fichier)---------
		unless($argv=~ /^c/) {
			next if($filename=~ /\.gif$|jpe?g$|png$/i);
			}
		$lettre= substr($filename,0,1);	
		if($lettre=~ /\d/) {
			$lettre = "0-9";
			}
		elsif($lettre=~ /\w/) {
			$lettre= lc $lettre;
			}
		$fliste = "liste_$lettre.html";
		# $rpath_fliste = adresse réelle de $fliste
		# tant qu'a faire placer les liste dans le rep voulu
		$rpath_fliste = "$d$slash$fliste";
		if(&jette_un_oeil($rpath_fliste)== 1) {
			print FL "<img SRC=\"file.jpg\"\>&nbsp;&nbsp;<a href=\"$filename\"\>$filename<\/a\><br\><div align=center\>$ptaille --- $fr_date_file<\/div\><br\>\n";	
			#close FL || die "Fermeture de $fliste impossible $!";
			}
		#------------------------------------------------------------------------------------------------------
    write;
    $line = ":$filename\n\t$ptaille\t$fr_date_file\n";
    if ($argv eq "c") {
	  $rem = &remdthat($filename);
      print OUTDAT "$reptmp $line\n$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() {
  my($fili)= @_;
  
  $fili = "$dir$slash$fili";
  my $i = 0;
  while (-e $fili) {
	if($fili =~ /html$/) {
	  $fili = "$dir$slash" . "rep_" . "$ds" . "_$i" . "$ext_html";
	  $fout = $fili;
	  }
	elsif($fili =~ /dat$/) {
	  $fili = "$dir$slash" . "rep_" . "$ds" . "_$i" . "$ext_dat";
	  $fout_dat = $fili;
	  }
	# a saquer quand ok------------------------------------------------------------------------de là
	else {
		print "\nProblème de fichier de sortie erreur dans gnotise\nnom du fichier de sortie: $fili\n";
		}
	#---------------------------------------------------------------------------a là
	$i++;
  # a saquer quand ok-------------------------------------------------------------------------de là
    #my $arch = "$fili" . "~";
    #rename $fili, $arch or die "impossible de faire comme cela $!";
   #--------------------------------------------------------------------------a là
  }
}

# donne la date et heure sous plusieurs format Français et numerique--------------------------------------
sub datefinefile {
  my ($file)= @_;
  
  my $formad_d = 4;
  our @lssjour = qw( Dim Lun Mar Mer Jeu Ven Sam);
  our @lslsjour = qw( Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi);
  our @lssmois = qw(Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre);
  my $datenum = ((stat($file))[$mode]);
  (my $sec,my $min,my $heure,my $mjour,my $mois,my $annee,my $sjour,my $ajour,my $isdst)=localtime($datenum);

  my $pa = "";
  my $num_mois = ($mois+1);
  if ($mois <= 9) {
    $num_mois = "0$num_mois";
  }
  if ($mjour <= 9) {
    $mjour = "0" . "$mjour";
  }
  if ($heure <= 9) {
    $heure = "0" . "$heure";
  }
  if ($min <= 9) {
    $min = "0" . "$min";
  }
  if ($sec <= 9) {
    $sec = "0" . "$sec";
  }
  $cj = $lssjour[$sjour];
  my $pj = substr($cj, 0, 2);
  my $pm = substr("$lssmois[$mois]", 0 , 3);
  if ($annee < 100) {
    my $pa = $annee;
  }
  elsif ($annee <=109) {
    my $pa = "0" . ($annee-100);
  }
  else {
    my $pa = ($annee-100);
  }
  if ($format_d eq "1") {
    # format differants 1: 20100131-203001 
    $fr_date_file = ($annee+=1900) . "$num_mois$mjour-$heure$min$sec";
  }
  elsif ($format_d eq "2") {
    # format differants 2: 31/01/2010-20:30
    $fr_date_file = "$mjour\/$num_mois\/" . ($annee+=1900) . "-$heure:$min";
  }
  elsif ($format_d eq "3") {
    # format differants 2:  Di-31/01/2010-20:30:02
    $fr_date_file = "$pj-$mjour\/$num_mois\/" . ($annee+=1900) . "-$heure:$min:$sec";
  }
  elsif ($format_d eq "4") {
    # format differants: $fr_dt_file = 31Jan10-20h
    $fr_date_file = "$mjour$pm" . "$pa" . "-$heure" . "h";
  }
  elsif ($format_d eq "5") {
    # format differants: $fr_dt_file = Di 31 Jan 10 - 20h30
    $fr_date_file = "$pj $mjour $pm" . " $pa" . "- $heure" . "h$min";
  }
  else {
    # format differants: $fr_date_file = Dim 31 Janvier 2010 - 20:30:02
    $fr_date_file = "$lslsjour[$sjour] $mjour $lssmois[$mois] " . ($annee+=1900) . " - $heure:$min:$sec";
  }
  return $fr_date_file;
}
#--------------------------------------------------------------------------------------------------------


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

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


sub jette_un_oeil {
	my ($rpath_fliste)=@_;
	
	if(-e $rpath_fliste) {
		open FL, ">>$rpath_fliste" or die "Ouverture de $fliste impossible $!";
		@contenu = <FL>;
		#close FL || die "Fermeture de $fliste impossible $!";
		# essayer if (grep -qF "$filename" $rpath_fliste)
		if(grep(/$filename/, @contenu)) {
			close FL || die "Fermeture de $rpath_fliste impossible $!";
			return 0;
			}
		else {
			return 1;
			}
		}
	else {
		my $fileliste = "$dir$slash$fliste";
		push @ls_rpath_fliste, $rpath_fliste;
		open FL, ">>$rpath_fliste" or die "Ouverture de $fileliste impossible $!";
		print FL "<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<link rel=\"stylesheet\""
		. " type=\"text\/css\" href=\"style.css\"\>\n\t<meta name=\"author\" content=\"Adelmar Alain\"\>\n" 
		. "\t<\/head\>\n<body\>\n";
		print FL '  <ul>' . "\n";
		print FL '  <li class="mu"><a class="neolink" href="index.html">Index</a></li>' . "\n";
		print FL '  <li class="mu"><a class="neolink" href="menu.html#menu_top">Menu</a></li>' . "\n";
		print FL '  <li class="mu"><a class="neolink" href="mailto:aadelmar@numericable.fr">Me Joindre</a></li>' . "\n";
		print FL '  </ul>' . "\n" . "<hr\>\n";
		print FL "<h1\>Liste des fichiers commencant par &lt;" . $lettre . '&gt;' . "<\/h1\><br>\n";
		print FL "Edit&eacute; automatiquement par le script $0 le: " . $french_date_now 
		. "\nn\'eff&eacute;ctuez pas de modifications (SVP)\.\n<hr\>\n";
		return 1;
		}
	}


	
	
	foreach (@ls_rpath_fliste) {
		open FL, ">>$_" or die "Ouverture de $_ impossible $!";
		print FL '  <hr>' . "\n";
		print FL '  <ul>' . "\n";
		print FL '  <li class="mu"><a class="neolink" href="index.html">Index</a></li>' . "\n";
		print FL '  <li class="mu"><a class="neolink" href="menu.html#menu_top">Menu</a></li>' . "\n";
		print FL '  <li class="mu"><a class="neolink" href="mailto:aadelmar@numericable.fr">Me Joindre</a></li>' . "\n";
		print FL '  </ul>' . "\n" . "<hr\>\n";
		print FL '  </body>' . "\n" . "</html\>\n";		
		close FL || die "Fermeture de $_ impossible $!";
	}

format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   @<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<
$filelbl, $ptaille, $fr_date_file
.



END;
