Vlink

Script Perl qui répare les liens locaux avant de publier.
usage: vv2l.pl [-cguls] [rep_a_traiter] 
dernière moture _ Aout 2010

#!/usr/bin/perl
# remd: vv2l comme Vaillant Verificateur De Liens - by asynchrone  *
# remd:  Répare les liens locaux de votre espace de publication    *
# (rep de pages perso, site) en les testant pour chaque fichier.   *
# Il répare les erreurs d’affectation, de path (absolu ou relatif) *
# UNIX/M$/LX, les fautes d’extensions, doublons, orthographe, etc. *
# Vérif des encres et ré-attribution du 1er flag ou création (-c)  *
# d'une encre #_top (si page existe sans flag). Corrige les fautes *
# d'orthographes et les path erronés.                              *
# Vers:4.3 => 6.6 | 08.2010  alain Adelmar Pessac aadelmar@free.fr *
#      -------------------------------------------------------     *
# (v: Version Vérif De Luxe (Unix-Like - Windows)  Alain Adelmar ) *
# remd: autonome n'utilise que les modules standards  (facultatif) *
#------------------------------------------------------------------*
# usage:  vv2l.pl [-cu] [rep_source] [sous-rep(image)]             *
#-----------------------------------                               *
# options:                                                         *
# -c (complet) effectuera des tests, logs et pré-réparation style  *
#              marquer d'un tag "top" les pages html pas marquées  *
# -g (gros site) pour les site dépassant les 50 pages ou 1000 liens*
#             cette option adapte la sortie formaté pour le choix  *
# -u (update) insère la date de mise à jour, en gardant l'original *
#             en commentaire, répare les liens.                    *
# -l (light) essai de réparer par lui même et tri avant de proposer*
#            a l'utilisateur. (peu simplifier le travail)          *
# -s (silencieux) répare les liens sans intervention de user, fait *
#             un rapport pour ce qu'il n'a pas réparrer.           *
#------------------------------------------------------------------*
# (script Perl pour environnement M$ et UNIX-LIKE)                 *
# créé par alain Adelmar (2008.11)   à Pessac 6 rue de Tunis 33600 *
#*******************************************************************
# $ID$:
# - Excellent conçu pour les gros site (>1000 pages)               *
# la meilleur version car elle fonctionne- enormisime - Alain A
# version utf8- encore beaucoup de controle. Il fonctionne
#  AAAA-pour Alain Adelmar Alias Asynchrone - AhAhAhAh!

my $script = "vv2l.pl";
my $vers = "6.6";
#$Author: alain $:"Adelmar Alain";
my $moi = 'Adelmar Alain <aadelmar@numericable.fr';

#use strict;
use File::Copy;
#use warnings;

use Cwd;
my $dir = cwd;
print "dir vaut :$dir\n";

use locale;

(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_now = $french_date_now;
my $datenum = 0;
my $fr_dt_file = my $fr_date_file = "";
my @tmpstat = "";
my $mode = 8;
my $format_d = 0;

print "date/heure: $fr_date_now\n";

my $lx = "*-" x 25;
my $file = $0;
print "file vaut $file\n";
$fr_date_file = datefinefile($file, $mode, $format_d);
$file = "";

my $head_lbl= "script $0\nécris par $moi\nle $fr_dt_file\nexecuter le $french_date_now\n";
my $head_lbl_console = "$lx\nscript:      $0\nle $fr_dt_file\nécris par:  $moi\nexecuter le: $french_date_now\n$lx\n";my $fr_num_file = my $nwligne = "";
my $gnus = 0;

my %pf = my %h_tencre = my %h_tag = my %h_rootf = my %h_lnkhttp = my %h_lnkftp = my %h_fst = "";
my $f = my $fout = my $resp = my $rootfile = my $e = my $tout = my $contenu = my $l = "";
my $d = my $srep = my $flg = my $rootfile_file = my $newsite = my $path_tmp = "";
my @contenu  = my @pathf = my @ligne = my @nwcopim = my @nwcontenu = my @val = ();
my $value = my $key = my $ext = my $hdl_file = my $troncfile = my $line = my $email = "";
my $recap_lbl= "$0 écris par $moi \nle $fr_date_file\nexecuter $fr_date_now\n";
my @cop = my @nwcop = ();
my @ls_other_file = my @ls_file_meta = my @files = my @ls_tencre = ();
my $kf = my $err = my $ef = my $j = my $ere = my $ht = my $q = my $body = 0;
my $u = my $i = my $ouvert = my $tronquage = my $index = my $tz = my $k = my $v = 0;
my $b = my $hf = my $pa = my $repu = "";
my $slx = "\n\n\n\n\n\n\n\n\n\n$lx";   # pour eviter le clear ou autre system nettoyage ecran
my $argv = "noting";
my @vh = values(%pf);

# pour l'adressage/les systeme UNIX, Linux, cygwin ou autre (/) et ceux de M$ (\)
my @gnul = ( "\\", "\/");   #pas mal because $slash sera toujours bon, je suis trop fort
my $cong= "this is a real gnu OS, congratulation\n";
if ($dir =~ /^\//) {
  $gnus++;
  }
my $slash = $gnul[$gnus];


# -----------traitement argument - dossier a traiter et verification $d valide------ debut

if (@ARGV) {
  if ($ARGV[0] =~ /^-/) {
    $ARGV[0] =~ s/-()/($1)/;
    ($argv = "c") if ($ARGV[0]=~ /^c/);   # pour complet
    ($argv = "g") if ($ARGV[0]=~ /^g/);   # pour gros site ou paquets de feuilles
    ($argv = "u") if ($ARGV[0]=~ /^u/);   # pour update
    ($argv = "l") if ($ARGV[0]=~ /^l/);   # pour light
    ($argv = "o") if ($ARGV[0]=~ /^o/);   # pour ortographe
    if ($ARGV[1] ne "") {
      $d = $ARGV[1];
      $srep = $ARGV[2];
      &verifd;
      }
    }
  else {
    $d = $ARGV[0];
    $srep = $ARGV[1];
    &verifd;
  }
}
else {
  print "usage: $script [-cou] [dossier_a_traiter] [sous-dossier_image]\n(made by $moi\n";
  #---------demander quel repertoire traiter et verifier si il existe
  print "$lx$lx\n";
  print "Indiquez le dossier a traiter:\n";
  chomp($d =<STDIN>);
  &verifd;
}

#----------------------------------------------------------------------------- fin

#--------------- initialisation des variables ------------------------- debut
my @copim = my @lines = my @nwlines = ();
my @nieme = ("zorro", "premier", "deuxieme", "troisieme", "quatrieme");
my $userx = "";

my $e_mailp = 'aadelmar@numericable.fr';
my $etlencre = my $fp = my $ff = my $fe = 0;
my $fileo = my $fileso = "";
my $encre = my $lnknet = my $lnkbrut = my $lnkbrt = my $lnkt = "";
my $cnta = my $cntlnkhttp = my $cnttl = my $encre_vue = my $cntlnkftp = 0;
my $z = my $eb = my $fr = my $ea = 0;
my $firstline = "Editer par le script $script vers:$vers ce jour $fr_date_now :\n";
my $psr = "Veuillez ré-entrer le nom simple du sous répertoire: expl: image\nil aura comme path $d\/image ou passer en tapant Enter\n";
my $psr1 = "avez vous un sous-repertoire (pour les photos, icones, etc)\nsi oui lequel: (expl: images)\n";
my $x_down = " " x 47;
# $x_down = ("*-" x 24) . "||";                      # fioritures qui soulignes
my $y = "__-__*" x 15;                               # idem pour différencier
my $al = "\t|     === A_l_a_i_n -\/\/- A_d_e_l_m_a_r ===      ||";    # pub perso
#--- explication pour l'utilisateur
my $lblo = "\n\tCe script $script va controler et réparer les liens locaux de chaque page HTML\n\tSans pour cela toucher à votre dossier de page-perso\n\til placera l integralite de son travail dans le repertoire courant\n\tdans un dossier nommer:\.\/newsite\n";

#----------------- sortie formatée pour l'affichage fichiers/tags --------- ok

format STDOUT_TOP =
Page @<<
$%

 n        lien                                 n              lien
=== ===============================             === ==============================
.


$rootfile_file = "vrl";
$hdl_file = "VRL";
my $o_ext = "log";
&ouvre_file($rootfile_file, $hdl_file, $o_ext);

#création et ouverture d'un rep temporaire pour placer le nouveau site -------------- debut
$newsite = "$dir$slash" . "newsite";
print "le newsite sera adresser comme : $newsite\n";
&faitmoitmp;   #johnny, johnny
# $path_tmp = "$tmp" . "$slash";  # cette ligne existe deja dans &faitmoitmp
print "$lx$lx\n";
#vrl est ouvert pour un log de constat d'encre possible en local
&traite_d;
&recup_all_tags;

#-------------------------------(1 à partir de là on à tous les liens possible
# stocké dans les hashages %h_tencre, %h_fst, %h_tag et %h_rootf
&onyva;

sub onyva {
  # passe en revue page/page, ligne/ligne, $lien/lien les copie crées dans $path_tmp
  opendir RC, "$path_tmp" or die "Ouverture de $path_tmp impossible $!";
  @files = (sort readdir RC);
  foreach $file(@files) {
    next if ($file =~ /\.log$/g);
    $fr_date_file = datefinefile($file, $mode, $format_d);
   
    #($troncfile, $ext)=split(/\./, $file);
    #$rootfile_file = "rap_$troncfile";
    #$hdl_file = "RAP";
    #my $o_ext = "log";
    #&ouvre_file($rootfile_file, hdl_file, $o_ext);
    print "$firstline$lx\n";
    #----------------------------------------------a là
 
    if ($file =~ /\.{1}s?h?x?t?m{1}l?$/i) {
      $kf++;
      print "$lx\nCe fichier est le $kf eme que vous traité\n";
      # faire ici le passage en pause

      ($troncfile, $ext)=split(/\./, $file);
      $rootfile_file = "rap_$troncfile";
      $hdl_file = "RAP";
      my $o_ext = "log";
      &ouvre_file($rootfile_file, $hdl_file, $o_ext);
      # attention de pas confondre rootfile ext et encre avec celle des liens
      $rootfile = $ext = $encre = "";
      $countpfl = $countpl = 0;
      print "$lx\n";
      &controle_file($file);
      &reparation($file);
      &compte_rendu;
      #close FSR || die "Fermeture de fsr impossible $!";
      push @rep, $file;
      }
    }

  close RAP || die "far toi encouler granda connassa rap $!";
  closedir RC || die "Fermeture de $path_tmp impossible (putain de merde) $!";
  #-------------------------------------------------------------------fin
  }

sub controle_file {
  my ($file) = @_;

  #initialisation des variables
  my @contenu= "";
  $filesrc = "$path_tmp" . "$file";
  $fr_date_file = &datefinefile($file, $mode, $format_d);
  print RAP "\t$lx\n$file du $fr_date_file\n";
  #----------------------------------
  open FI, "$filesrc" or die "Ouverture du fichier $file impossible $!";
  @contenu = <FI>;
  close FI || die "Fermeture impossible $!";
  $countpl = 0;
  #--------------------------- voila regler ca et fermer les fichier ouverts
 
  foreach $line(@contenu) {
    $countpl++;     #compteur de ligne par file
    $fl = "file: $file \|ligne:$countpl ";   #ok preindication file origine ligne (pour RAP_a)
    $flplus = "$fl :lnknet:$lnknet encre:$encre rootfile:$rootfile ext:$ext\n";  # ceci n'est pas initialisé a deplacer
    $countpfl = 0;      # ok initialise compteur par lien de la ligne
    @ls_m = ($line =~ /href=\"(.*?)\"\>/ig);
    foreach (@ls_m) {
      $j++;   # que fait ce $j?
      $corrompu = $etlencre = 0;
      $encre = "";
      $lnkbrut = $_;
      # ok compteur par liens dans la ligne (3 max)
      $countpfl++;
      # a degager quand tout tourne ca c'est du bla bla
      $oldlb = $lnkbrut;
      $q++;     #numero unique du lien
      print RAP "$lx\n$fl lien brut: $lnkbrut c\'est le $nieme[$countpfl]\n";
      $err = "err $fl lkb:$lnkbrut l: $countpl n: $countpfl\n";
      print "$lnkbrut\t$countpl\n";
      if ($lnkbrut=~ /^mailto/) {
        ($kk, $email) = split(/:/, $lnkbrut);
        ($login, $fai) = split(/\@/, $email);
        $cnta++;
        $eb++;
        $v++;
        print RAP "login = $login et fai = $fai\n";
        #------------------------modification perso
        if ($email =~ /^a.?adelmar\@numericable\.fr/) {
          $e_mailp = "aadelmar\@free\.fr";
          print RAP "erreur adresse corrigé $email deviens $e_mailp\n";
          $ea++;
          $line =~  s/()\Q$email\E()/$1$e_mailp$2/;
          $v++;
          # a saquer because c'est line qu'il faut modifier
          $nwline = $line;
          print "line: $nwline\n";
          #$nwmot =  s/()$email()/($1)$e_mailp($2)/;
          print "modif d'adresse mail effectué sur $file fraction de ligne $mot $countpl\n";
          }
        push @adressemail, "$login\@$fai";
        &chklnk;
        $v++;
        }
      #--------lien vers news-groupes trouvé
      elsif ($lnkbrut=~ /^news/) {
        ($kk, $nws) =split(/:/, $lnkbrut);
        print RAP "news-groupes trouvé $nws\n";
        $eb++;  #pas sur
        &chklnk;
        $v++;
        }
      #--------------------http
      elsif ($lnkbrut=~ /^http:\/\//i) {
        $encre ="";
        ($lnkhttp, $encre) = split(/\#/, $lnkbrut);
        $cntlnkhttp++;
        $prlnkhttp = "$file ligne:$countpl\t$lnkhttp\t$encre";
        push @lnk_http, $prlnkhttp;
        # ou en hashage
        $h_lnkhttp{"$lnkhttp" . "_$cntlnkhttp"} = $encre;
        $eb++;  #pas sur
        $encre= "";
        &chklnk;
        $v++;
      }
      #------------------ftp
      elsif ($lnkbrut=~ /^ftp:\/\//i) {
        $encre= "";
        ($lnkftp, $encre) = split(/\#/, $lnkbrut);
        $cntlnkftp++;
        $prlnkftp = "$file ligne:$countpl\t$lnkftp\t$encre";
        push @lnk_ftp, $prlnkftp;   
        #-------------- ou en hashage
        $h_lnkftp{"$lnkftp" . "_$cntlnkftp"} = $encre;
        $eb++;  #pas sur
        $encre= "";
        &chklnk;
        $v++;
        }
      #-------------------local (ce qui nous interresse)
      #-----------------------------------------------------------------ici
      else {
      SCONTROL:if (exists ${{reverse %h_tencre}} {$lnkbrut}) {
      # *CB1 tout bon
      print RAP " *CB1 good tb $lnkbrut n\:$q nc\:$v\n";
          $v++;
          $eb++;
    }
    # *CB2
        elsif (exists ${{reverse %h_fst}} {$lnkbrut}) {
          print RAP " *CB2 good vfile $lnkbrut n\:$q nc\:$v\n";
          $v++;
          $eb++;
    }
        # *CB3(2/2) peut etre le lien ne pointe que sur encre
        elsif (exists ${{reverse %h_tag}} {$lnkbrut}) {
      # *CB3(1) si le nom de la page + le lien colle-------------------------pass 3 ok--v
          if(exists ${{reverse %h_tencre}} {"$file" . "$lnkbrut"}) {
            print RAP " *CB3(1) good sf $lnkbrut nlien\:$q nc\:$v\n";
            $v++;
            $eb++;
      }
      #------------------------------------------------------------------------------°
      # sinon
          else {
        # *CB3(2)
        print "ceci est fortement improbable mais votre lien $lnkbrut doit etre reparrer\nufull:\n";
        print RAP " *CB3(2) good sf $lnkbrut nlien\:$q nc\:$v\n";
        &utilisateur_full;
      }
    }
    # *CB4 --apres la moulinette a bon liens on entre dans le vif------
    elsif ($lnkbrut =~ /[\/]|[\\]/) {
      # if ($lnknet =~ /[\/]|[\\]/) {
      $ef++;
      $v++;
      print RAP " *CB4a part a dp $lnkbrut nlien\:$q nc\:$v\n";
      &degage_path;
    }
    else {
      # assignation des valeurs lnknet et encre et stockage des parametres existants
      $ere++;
      &decortique_file;
      $fl = "file: $file \|ligne:$countpl ";
      $flplus = "$fl :lnknet:$lnknet encre:$encre rootfile: $rootfile ext:$ext\n";
      print RAP " *CB4 $flplus\n";
      # *CB4b(2/2)------------------------------------------------------------| pass 2 ok --v
      if ($lnkbrut=~ /^\#/) {
        $lnkbrut = "$file" . "$lnkbrut";
        print RAP "*CB4b $lnkbrut nlien\:$q nc\:$v\n";
        #---------------------------------------------------------------------------°
        # *CB4b1
        if (exists ${{reverse %h_tencre}} {$lnkbrut}) {
          print RAP "$flplus fff encre seule a reparrer $lnknet deviens $lnkbrut\n";
          &utilisateur_full;
          $v++;
          print RAP "*CB4b1 $lnkbrut nlien\:$q nc\:$v\n";
          goto SCONTROL;
        }
        else {
          #---------------------------------------------------------------------|pass 2 ok --v
          # *CB4b2
          print RAP "*CB4b2 $flplus commence par dieze mais encre pas bonne $lnkbrut\n";
          $etlencre= 1;
          $lnknet = $file;
          ($rootfile, $ext)=split(/\./, $lnknet);
          &utilisateur_fe;
          $v++;
          goto SCONTROL;
        }
        #--------------------------------------------------------------------------------------°
      }
      # *CB4c ici on ce rend compte que file est bon mais y a autre chose qui pourri le lien
      elsif (exists ${{reverse %h_fst}} {$lnknet}) {
        my $q = 0;
        @val= ();
        @tr_encre_pf= ();
        @val = (values (%h_tencre));
        foreach (@val) {
          ($lknet_tmp, $encre_tmp)= split(/\#/, $_);
          if ("$lnknet" eq "$lknet_tmp") {
                    if($encre_tmp eq "") {
                      $rl = "$lknet_tmp";
                      }
                    else {
                      $rl = "$lknet_tmp" . "\#" . "$encre_tmp";
                      }
                    push @tr_encre_pf, $rl;
                    $q++
          }
        }
        print "$lx\n$flplus Pas bon\t $lnknet\t $encre :\n *CB4c \n";
        $y = 0;
        $a = $b = "";
        $na = $nb = 0;
        @tr_encre_pf = sort @tr_encre_pf;
        for (0 .. (@tr_encre_pf/2)) {
          for $i(0..1) {
        $u = $y + $i;
        #$pf{$i} = "$tr_file[$u]";
        $pf{$i} = $tr_encre_pf[$u];
          }
          $a = $pf{0};
          $na = $u - 1;
          $b = $pf{1};
          $nb = $u;
          write;
          #print "\t$_\t$y\n";
          $y += 2;
        }
        print "[enter] suprimera l encre mais pas le liens\n";
        chomp($encru = <STDIN>);
        # *CB4c1 passe
        if ($encru eq "") {
          print "rien ne sera fait\n";
          $lnkbrut = "$lnknet";
          print RAP " *CB4c1 $lnkbrut nlien\:$q nc\:$v\n";
          $v++;
        }
        # *CB4c2 chiffre entrer -------------------------------------------- |pass 1 ok-----v
        elsif($encru =~/^\d/) {
          print RAP "votre choix num qui vaut $tr_encre_pf[$encru]\n";
          print "votre choix num qui vaut $tr_encre_pf[$encru]\n";
          $lnkbrut = $tr_encre_pf[$encru];
          print RAP " *CB4c2 $lnkbrut nlien\:$q nc\:$v\n";
          $v++;
          &chklnk;
          goto SCONTROL;
        }
        #-----------------------------------------------------------------------------------°
        # *CB4c3 encre entrer a la main
        elsif($encru=~ /^\w/) {
          print RAP "vous avez entrer la chaine $encru\n";
          print "vous avez entrer la chaine $encru\n";
          $lnkbrut = "$encru";
          print RAP " *CB4c3 $lnkbrut nlien\:$q nc\:$v\n";
          &chklnk;
          $v++;
          goto SCONTROL;
        }
        print "ici la fin du buzz encre\n";
      }
      # *CB4d ici on se rend compte que c'est l'extention qui daille
      elsif (exists ${{reverse %h_tencre}} {"$rootfile\.html\#$encre"}) {
        print RAP "ok c'etait l'extention qui daillait, donc ext=html\n";
        print RAP "gagne lien vers encre du meme fichier $lnkbrut nlien\:$q nc\:$v\n";
        $lnkbrut = "$rootfile\.html\#$encre";
        print RAP " *CB4d $lnkbrut nlien\:$q nc\:$v\n";
        &chklnk;
        $v++;
      }
      # *CB4e ici on se rend compte que c'est l'extention qui daille
      elsif (exists ${{reverse %h_fst}} {"$rootfile\.html"}) {
        print RAP "*CB4e $fl : ici c'est rootfile qui est ok\n";
        # *CB4e1-----------------------------------------------------| pass 5 ok ---v
        if($encre == 0) {
          $lnkbrut = "$rootfile\.html";
          print RAP " *CB4e1 $lnkbrut nlien\:$q nc\:$v\n";
          print RAP "gagne lien vers $lnkbrut nlien\:$q nc\:$v\n";
          &chklnk;
          $v++;
        }
        #---------------------------------------------------------------------------°
        # *CB4e2
        else {
          # si cette construction est infructueuse faire lnknet=rootfile.html =>ufe
          $lnkbrut = "$rootfile\.html\#$encre";
          print RAP " *CB4e2 $lnkbrut nlien\:$q nc\:$v\n";
          print RAP "aurai du etre traiter en CB4d look that $lnkbrut gagné $v\n";
          &chklnk;
          $v++;
          goto SCONTROLE;
        }
      }
      # *CB4f ici il n'y a que rootfile qui matche
      elsif (exists ${{reverse %h_rootf}} {$rootfile}) {
        print "quel lien match, choisissez:\n";
        $i = 0;
        while ( ($key, $value) = each %h_rootf) {
          if($value eq $rootfile) {
        $ch_ext = $key;
        ($kk, $ext_tmp)= split(/:/, $ch_ext);
        push @ls_ext, $ext_tmp;
        print "pour $rootfile\.$ext_tmp taper $i\n";
          }
          $i++;
        }
        $resp= <STDIN>;
        chomp $resp;
        $lnkbrut = "$rootfile\." . $ls_ext[$resp];
        print "vous avez valider $lnkbrut\n";
        print RAP " *CB4f $lnkbrut nlien\:$q nc\:$v\n";
        &chklnk;
        $v++;
        goto SCONTROL;
      }
      # *CB4g
      else {
        # si il y a une encre (reparrer)et aussi un faux nom de fichier creer un if
        # $p++;
        # *CB4g1----------------------------------------------------------------------Pass 4 ok --v
        if ($encre eq "") {
          # Dernier else | sans encre ce liens part a uf: code erreur "desauf"
          print "$lx desauf\n$flplus\n";
          print RAP " *CB4g1 (mais pas sorti) $lx desauf\n$flplus\n";
          &utilisateur_f;
        }
        #--------------------------------------------------------------------------------°
        # *CB4g2 --------------------------------------------------------------------Pass 6 ok--v
        else {
          # choisir un fichier puis une encre
          # Dernier else num: $p| avec encre ce liens part a ufull: code erreur deaafull
          print "$lx deaafull\n$flplus\n";
          print RAP "*CB4g2 $lx deaafull\n$flplus\n";
          &utilisateur_full;
          #-----------------------------------------------------------------------------------°
        }
      }
    }
      }
    }
    # $j = 1; # $j est le compteur de liens total
    push @nwcontenu, $line;
  }
}   



#-----------------------------Recup_all_tags---------------------------- debut
sub recup_all_tags {
  # --le handle est pour RAP

  foreach $likef(@nwlsfile) {
    $cf++;     #compteur de fichiers
    next if ($likef=~ /^\./);
    $file = $likef;
    $encre_vue = 0;
    # re-ajouter le path au nom de fichier
    $ftagsrc = "$path_tmp$slash$file";
    # vérif mode (html, tml, htm, xml, etc..)
    if ($file =~ /\.{1}s?h?x?t?m{1}l?$/i) {
      $fr_date_file = datefinefile($file, $mode, $format_d);
      (push @ls_h_fst, $file) unless ( scalar(grep(/$file/, @ls_h_fst)) );
      (push @ls_tencre, $file) unless ( scalar(grep(/$file/, @ls_tencre)) );
      @lines = @nwlines = "";
      open FT, "$ftagsrc" or die "Ouverture du fichier $file impossible $!";
      binmode(FT);
      $lpp = 0;
      @lines = <FT>;
      close FT || die "Fermeture impossible $!";
      # reconstruit les balises tronquées et sort sur @nwlines
      @nwlines = &reconstruire_ligne(@lines);
     
      foreach $line(@nwlines) {
                print "line\n";
        if ($line =~ /<body\>/i) {
          $body = $lpp;
      # discutable si &cherche_encre pas $tz++ et vice versa
          &cherche_encre($line);
      $tz++;
          push @copim, $line;
      $lpp++;
    }
        else {
      print "je vais passer a cherche_encre\n";
          &cherche_encre($line);
          push @copim, $line;
      $lpp++;
    }
      }
      # tout ce qui suit est faut jusqu'a &faitdcopies, mais pas grave car ne peut etre utiliser - a saquer
      if ($encre_vue == 0) {
        if ($argv eq "c") {
          # $copim[$body].= "<a name=\"_top\"\>\n"; # je ne comprend pas cette ligne surement une erreur
      $copim[$body] = "<a name=\"_top\"\>\n";
          print VRL "pour voir body trouvé\n$copim[$body]\n";
          }
        else {
          # ce else est à degagez quand testé
          print VRL "pour voir body trouvé\n$copim[$body]\n";
    }
      }
      if ($argv eq "u") {
        $copim[$body] .= "\n<-- mise à jour du document par $script le $fr_date_now \ninitialement daté du " . $fr_date_file . "\n";
        print VRL "pour voir body trouvé\n$copim[$body]\n";
      }
      &faitdcopies;
      @copim = "";
      @nwlines = "";
      # detail des encres trouvées par fichiers
      print VRL "\npour $file $encre_vue encre trouvé\/s\nDétail:\n";
      #while ($une_encre = shift(@ls_encre_pf)) {
      #  print VRL ("\t$une_encre\n");
      #}
    }
    else {
      # on ne sait jamais peut etre un lien fait reference à un script donc
      # attention
      (push @ls_h_fst, $file) unless ( scalar(grep(/$file/, @ls_h_fst)) );
      (push @ls_tencre, $file) unless ( scalar(grep(/$file/, @ls_tencre)) );
    }
  }
 

  #---passage de la liste contenant tous les liens @ls_tencre au tableau de hashage %h_tencre
  # ote les doublons
  my $i = 0;
  foreach $el (@ls_tencre) {
    $tmp{$el} = $i++;
    }
  @ls_tencre = keys %tmp;
  @ls_tencre = sort(@ls_tencre);
  foreach (@ls_tencre) {
    $h_tencre{$i_h_tencre} = $_;
    $i_h_tencre++;
    }
  #--- idem pour les encres seules
  @ls_encre_pf = sort(@ls_encre_pf);
  foreach (@ls_encre_pf) {
    $h_tag{$i_h_tag} = $_;
    $i_h_tag++;
    }
  #--- idem pour les fichiers seul
  @ls_h_fst = sort(@ls_h_fst);
  foreach (@ls_h_fst) {
    $h_fst{$i_h_fst} = $_;
    $i_h_fst++;
    }
  #----------a degager quand pris en compte---voici les trois hachage
  print VRL "\n$lx\nvoici les trois hachage:\n$lx\nh_tencre\n";

  foreach $key (sort keys %h_tencre) {
    $val = $h_tencre{$key};
    print VRL "\t$val\n";
  }
  print VRL "\n$lx\nh_fst\n";
  my $i= 0;
  while (($zo, $ht) = each %h_fst) {
    ($rootf, $ext)= split(/\./, $ht);
    $h_rootf{"$i:$ext"}= $rootf;
    print VRL "\t$zo:$ht\n";
  }
  print VRL "\n$lx\nh_tag\n";
  while (($zo, $htag) = each %h_tag) {
    print VRL "\t$zo:$htag\n";
  }

  print VRL "\n$lx\n$moi vous remercie d\'utiliser $script vers:$vers \n- $fr_date_now\n";
  #-----------------------------------
  close VRL || die "double dremmer closure of $flg not possibilé $!";
}

#--------------------------------------------------------------------------------- fin

sub cherche_encre {
  my ($line)= @_;

  if ($line=~ /<a\sname=\"(.*?)\"/i) {
    $tag = $1;
    $encre_vue++;
    $fz = "$file#$tag";
    push @ls_tencre, $fz;
    push @ls_encre_pf, "#$tag";
    $tz++;
    print "encre tttrouvée ||| $tag|\n";
    }
  # si aucune encre trouvé peut etre interessant...
}

#---------------------------------------------------------- debut
sub reparation {
  my ($file)= @_;

  $fcible = "$path_newsite" . "$file";
  open FR, ">$fcible" or die "Ouverture de $fcible impossible $!";
  print FR @nwcontenu;
  #réinitialisation des listes par fichiers
  @nwcontenu = "";  # ou @nwcontenu = @nwl = "";
  close FR || die "Fermeture de $fcible impossible $!";
}

sub utilisateur_f {

  $userx = "f";
  @val =();
  $a = $b = "";
  # @valalpha = "";  #en prevision du tri des concordances (voir 5 lignes plus bas)
  print RAP "uf:Ce liens n a pas de corresp $lnkbrut il par a user\n";
 # print "Choisissez un fichier vers lequel $lnkbrut pointera\n";
  print "$lx\nChanger fielname: $lnkbrut [num]|[Enter]|[q] quitter\n";
  @val = (values (%h_fst));
  @val = (sort @val);
 # # trier par ordre alphabétique par concordance, si option -l activé--------
 # if ($argv eq "l") {
 #   $deb_lkbrut = substr($lnkbrut, 0, 1);
 #   foreach $element(@val) {
 #     my $deb_ancre = substr($element, 0, 1);
 #     (push @valalpha, $element) if ($deb_ancre eq $deb_lkbrut);
 #     }
 #   }
 # if (@valalpha ne "") {
 #   @val = @valalpha;
 #   }
 # #----------------------------------------------------------------------------
  $i = 0;
  $pair = 0;
  $ff++;
  foreach (@val) {
    $lknet_tmp = $_;
    $max = 40;
    DEBF:if($pair == $max) {
      &regarder($userx);
      }
    else {
      if($pair%2 == 0) {
        $na = $i;
        $a = $lknet_tmp;
        if($lknet_tmp eq "$val[$#val]") {
      $b = "n\/a";
          write;
          }
        $i++;
        $pair++;
        }
      else {
        $nb = $i;
        $b = $lknet_tmp;
        write;
        $pair++;
        $i++;
        }
      }
    }
  &regarder($userx);
}


sub utilisateur_fe {

  $userx = "fe";
  @val =();
  $a = $b = "";
  # @valalpha = "";  #en prevision du tri des concordances (voir 5 lignes plus bas)
  # ligne dessous a saquer quand bon
  print RAP "fe:pas de corresp pour $lnkbrut il par a user\n";
 # print "Choisissez une encre vers lequel $lnkbrut pointera\n";
  print "$lx\nChanger ancre: $lnkbrut [num]|[Enter]|[q] quitter\n";
  @val = (values (%h_tencre));
  @val = (sort @val);
 # # trier par ordre alphabétique par concordance, si option -l activé---------
 # if ($argv eq "l") {
 #   $deb_lkbrut = substr($lnkbrut, 0, 1);
 #   foreach $element(@val) {
 #     my $deb_ancre = substr($element, 0, 1);
 #     (push @valalpha, $element) if ($deb_ancre eq $deb_lkbrut);
 #     }
 #   }
 # if (@valalpha ne "") {
 #   @val = @valalpha;
 #   }
 # #-----------------------------------------------------------------------------
  $pair = 0;
  $i = 0;
  foreach (@val) {
    #---pour limiter a lnknet
    $value = $_;
    ($lknet_tmp, $encre_tmp)= split(/\#/, $_);
    if($lknet_tmp eq $lnknet) {
      $max = 40;
      DEBFE:if($pair == $max) {
        &regarder($userx);
        }
      else {
        if($pair%2 == 0) {
          $na = $i;
          $a = $value;
          if($value eq "$val[$#val]") {
        $b = "n\/a";
            write;
            }
          $i++;
          $pair++;
          }
        else {
          $nb = $i;
          $b = $value;
          write;
          $pair++;
          $i++;
          }
        }
      }
    }
  &regarder($userx);
  }


sub utilisateur_full {

  $userx = "full";
  @val = ();
  $a = $b = "";
  # @valalpha = "";  #en prevision du tri des concordances (voir 5 lignes plus bas)
  print RAP "ufull:Ce liens n a pas de corresp $lnkbrut il par a user\n";
  print "$lx\nChanger lien: $lnkbrut [num]|[Enter]|[q] quitter\n";
  @val = (values (%h_tencre));
  @val = (sort @val);
 # # trier par ordre alphabétique par concordance, si option -l activé---
 # if ($argv eq "l") {
 #   $deb_lkbrut = substr($lnkbrut, 0, 1);
 #   foreach $element(@val) {
 #     my $deb_ancre = substr($element, 0, 1);
 #     (push @valalpha, $element) if ($deb_ancre eq $deb_lkbrut);
 #     }
 #   }
 # if (@valalpha ne "") {
 #   @val = @valalpha;
 #   }
 # #----------------------------------------------------------------------
  $i = 0;
  $pair = 0;
  foreach (@val) {
    $value = $_;
    $max = 40;
    DEBFULL:if($pair == $max) {
      &regarder($userx);
      }
    # ceci affiche les valeurs $values et les chiffres represantant les valeur indexés sur $i
    else {
      if($pair%2 == 0) {
        $na = $i;
        $a = $value;
        if($value eq "$val[$#val]") {
      $b = "n\/a";
          write;
          }
        $pair++;
        $i++;
        }
      else {
        $nb = $i;
        $b = $value;
        write;
        $pair++;
        $i++;
        }
      }
    }
  &regarder($userx);
}



sub faitdcopies {
  # les copies de fichier en meta langage doivent etre copier dans /newsite_x/tmp
  $copie = "$path_tmp" . "$file";

  #&reconstruire_ligne;

  print VRL "fichier $file,de $j lignes dont $k ligne href couper\n";

  open FC, ">$copie" or die "Ouverture de $copie impossible $!";
  print FC "@nwlines";
  #print FC "@copim";
  #---
  if ($argv eq "u") {
    print FC '<!-- fichier initial ' . "$file daté du $fr_date_file" . ' -->';
    }
  close FC || die "Fermeture de $copie impossible $!";

  @copim = "";
  @nwlines = @lines = "";

  $z++;
}

#------------------------------------------------------------------------verifd
sub verifd {

  unless (-e $d) {
    print "Veuillez ré-entrer le chemin complet du dossier à traiter, expl:" . '/home/pub/monsite ou //perl//pub//toto' . "\n";
    chomp($d = <STDIN>);
  }
}

sub traite_d {
  #-----------ouverture lecture, assignation @lsfile, controle srep != sous_rep
  opendir R, "$d" or die "Ouverture de $d impossible $!";
  my @lsfile = (sort readdir R);
  closedir R or die "Fermeture du repertoire R impossible $!";
  foreach $file(@lsfile) {

    if ($file =~ /^\./) {
      print "voulez vous traiter ce fichier [o,n](n): $file\n";
      $point = <STDIN>;
      chomp $point;
      if($point =~ /^o/i) {
    push @ls_other_file, $fichiercible;
    }
      }
    # vérifier si un rep est $srep (donc juste rep_rootname ou plus bas) et le traiter à la place de &faitmoitmp
    if (-d "$d$slash$file") {
      my $sous_rep = $file;
      # vérifier si un rep est $srep (donc sous la forme /home/pub/foo/bar)et le traiter à la place de &faitmoitmp
      #demander a user si on traite $sous-rep
    }
    else {
      my $fichiersource = "$d$slash$file";
      #print "$lx\navant copy fichiersource vaut $fichiersource\n";
      my $fichiercible = "$path_tmp$file";
      #print "$lx\napres copy fichiercible vaut $fichiercible\n";
      if ($file =~ /\.{1}s?h?x?t?m{1}l?$/i) {
    push @h_fst, $file;
    push @ls_file_meta, $fichiercible;
    copy($fichiersource, $fichiercible) or die "impossibilité de copier $fichiersource sur $fichiercible $!";
    }
      else {
    push @h_fst, $file;
    my $fichiercible = "$path_newsite$file";
    push @ls_other_file, $fichiercible;
    copy($fichiersource, $fichiercible) or die "impossibilité de copier $fichiersource sur $fichiercible $!";
    }
      #copy($fichiersource, $fichiercible) or die "impossibilité de copier $fichiersource sur $fichiercible $!";
      # exec dos2unix "$d$slash$file"; # voir si ca marche
      push @nwlsfile, $file;
    }
  }
  # rend compte sur VRL
  print VRL "\n$lx\nliste des fichiers meta que recup_all recopiera dans $path_tmp\n";
  foreach (@ls_file_meta) {
    print VRL "$_\n";
    }
  print VRL "\n$lx\nliste des autre fichiers que recopier dans $path_newsite\n";
  foreach (@ls_other_file) {
    print VRL "$_\n";
    }
  print VRL "\n$lx\n";
}


#---------- choix du repertoire temporaire-------------\
sub faitmoitmp {
  my $q = 0;
  if (-e $newsite) {
    while (-e $newsite) {
      $q++;
      $newsite = "$dir$slash" . "newsite" . "_$q";
    }
    mkdir $newsite or die "ouverture de $newsite impossible $!";
  }
  else {
    mkdir $newsite or die "ouverture de $newsite impossible $!";
  }
  $tmp = "$newsite$slash" . "tmp";
  mkdir $tmp or die "création de $tmp impossible $!";
  $path_tmp = "$tmp$slash";
  $path_newsite = "$newsite$slash";
 
  # ca ne veut rien dire si $srep est du style /home/pub/image ca marchera pas
  if (defined $srep) {
    if ($srep =~ /\w$/i) {
      $srep = "$path_newsite" . "$srep";
      mkdir $srep or die "ouverture de $srep impossible $!";
    }
  }


  print "Un dossier newsite contiendra vos pages corrigées\net $slash" . "newsite$slash" . "tmp contiendra les logs de synthése\n";
}


#--------------------------sous procedure qui modifie les portions de ligne
sub chklnk {
  if($corrompu == 0) {
    $line =~ s/()\Q$oldlb\E()/$1$lnkbrut$2/;
    $oldlb = $lnkbrut;
    $corrompu++;
  }
  else {
    $line =~ s/()\Q$oldlb\E()/$1$lnkbrut$2/;
    $oldlb = $lnkbrut;
  }
    # $line =~ s/$oldlb/$lnkbrut/xmg;
    # $line =~ s/()\Q$oldlb\E()/$1$lnkbrut$2/;

}


#---------------------------------------------------------------degage_path
sub degage_path {
  print RAP "DP: path trop long $err\n";
  &decortique_file;
  while ($lnknet =~ /$slash/) {
    @pathl = split(/$slash/, $lnknet);
    $fpointe = pop @pathl;
   # $presquesrep = pop @path1;
   # ($fpointe = $presquesrep) if ($presquesrep=~ /$srep$/);   # laisse srep dans le nom si il exsiste
    if ($encre gt "") {
      $lnknet = $fpointe;
      $lnkbrut = "$lnknet" . "\#$encre";
      print RAP "Correction faite $lnkbrut par dp\n";
      print "Correction faite $lnkbrut par dp\n";
    }
    #
    #------------------------------------------------pass 4 ok -------v
    else {
      $lnkbrut = $lnknet = $fpointe;
      print RAP "Corriger: $lnkbrut par dp\n";
      print "Correction faite $lnkbrut par dp\n";
    }
    #-----------------------------------------------------------------°
  }
  $v++;
  $fr++;
  &chklnk;
  goto SCONTROL;
}



# lknet2lnkbrut-----------------debut (ne sert qu'a controler au debuggage)
sub lknet2lnkbrut {
  print RAP "LKNET2LB: etat des liens en entrer:\nln: $lnknet\nlb: $lnkbrut\n";
  if($encre eq "") {
    $lnkbrut = "$lnknet";
  }
  else {
    $lnkbrut = "$lnknet" . "\#" . "$encre";
  }
  &chklnk;
  print RAP "LKNET2LB: etat des liens en sortie:\nln: $lnknet\nlb: $lnkbrut\n$lx\n";
  goto SCONTROL;
}
#--------------------------------- fin




#----------------------------------------Compte rendu ---------------------------debut
sub compte_rendu {
 
  if ($file =~ /\.{1}s?h?x?t?m{1}l?$/i) {
    $file_cr= "$path_tmp" . "frap_" . "$ir.log";

    open FRAP, ">$file_cr" or die "Ouverture de $file_cr impossible $!";
    print "$firstline$lx\n";
    print FRAP "Liens http de $file trouvé avec liste:\n";
    foreach $lk(@lnk_http) {
      print FRAP "adresse Web: $lk\n";
      }
    print FRAP "\n$lx\navec le hashage maintenant\n";
    while ( ($key, $value) = each %h_lnkhttp) {
      print FRAP "$key = $value\n";
      }
    print FRAP "\n$lx\n";
    print FRAP "liens ftp de $file trouvé:\n";
    foreach $lk(@lnk_ftp) {
      print FRAP "adresse ftp: $lk\n";
    }
    print FRAP "\n$lx\navec hashage now:\n";
    while ( ($key, $value) = each %h_lnkftp) {
      print FRAP "$key " . "=" . "$value\n";
    }
    print FRAP "$lx\n$lx\navec le nouveau hashage h_tencre\n";
    while ( ($key, $value) = each %h_tencre) {
      print FRAP "$key = $value\n";
      }
    #-----------login now----
    print FRAP "$lx\n\tlogin trouvé:\n";
    $login = join("\n", @adressemail);
    print FRAP "$login\n";
    if($ea >= 1) {
      print FRAP "$ea erreurs reparés par $e_mailp\n";
    }
    #------------stat
    print FRAP "$lx\n";
    print FRAP "Sur un total de $cnttl lignes controler\npour un total de $j liens controler :\n";
    print FRAP "$cntlnkhttp liens http: " . "\nnon controler\n" . "\n$cntlnkftp liens ftp:\nnon controler pour le moment\n";
    print FRAP "Les lnknet maintenant\n";
    print FRAP "$j liens controler sur $file\n";
    print FRAP "recap total de $j liens:\n$eb bon adressage\n$ef erreur adressage\n$fr erreur adressage fichier réparer\n$eb bonne encre\n$ere erreur encre\n$err encre reparrer\nerreur adresse web $ea\n";
    $filos = join("\n", @rep);
    print FRAP "effectuer sur les fichiers:\n" . "\n$filos\n$lx\n";  #ca marche
    print FRAP "fait le $fr_date_now\n";
    close FRAP || die "dreumer ca bloque $!";
    }

  # --------------------------------remise a zero de nwlines et incremente index rapport
  @nwcontenu = "";
  $ir++;
}
#------------------------------------------------------------------------------------- fin
#-------------------------------------ouvre_log-- géant
sub ouvre_file {
  my ($rootfile_file, $hdl_file, $ext)= @_;
 
  print "dans ouvre_file mon rootfile_file vaut $rootfile_file\n";
  my $i = 0;

  if ($rootfile_file eq "var_2vvl") {
      $flg = "$dir$slash$rootfile_file.$ext";

    while (-e $flg) {
      $flg = "$dir$slash$rootfile_file" . "_$i" . ".$ext";
      $i++;
      }
  }

  if ($path_tmp eq "") {
    $path_tmp = $dir;
  }
  $flg = "$path_tmp$slash$rootfile_file.$ext";

  while (-e $flg) {
    $flg = "$path_tmp$slash$rootfile_file" . "_$i" . ".$ext";
    $i++;
  }
  open $hdl_file, ">$flg" or die "Ouverture de $flg impossible $!";
  print $hdl_file "script: $script (V: $vers) - date: $fr_date_now\n$lx\n";
}

sub regarder {
  my $userx = @_;
  # print "$lx\nChanger lien: $lnkbrut [num]|[Enter]|[q] quitter\n";
  chomp($repu = <STDIN>);
  # si l'user ne veux pas ce prononcer| ou n'est pas dans les 40 propositions pour uf et uef
  if($repu eq "") {
    #$max = $max + 40;
    $pair = 0;
    (goto DEBF and undef $repu) if ($userx eq "f");
    (goto DEBFE and undef $repu) if ($userx eq "fe");
    (goto DEBFULL and undef $repu) if ($userx eq "full");
#    if ($userx eq "f") {
#      undef $repu;
#      goto DEBF;
#    }
#    elsif ($userx eq "fe") {
#      undef $repu;
#      goto DEBFE;
#    }
#    elsif ($userx eq "full") {
#      undef $repu;
#      goto DEBFULL;
#    }
    }
  elsif($repu =~ /^\d/) {
    $lnkbrut = $val[$repu];
    print RAP "\n $userx important\n$lnkbrut\n";
    $lnkbrt = $lnkbrut;
    ($lnknet, $encre)= split(/\#/, $lnkbrt);
    print "Votre choix valider:\t $lnkbrut\n";
    $userx = "";
    $v++;
    &chklnk;
    undef $repu;
    goto SCONTROL;
  }
  elsif($repu =~ /^q$/i) {
    $userx = "";
    $v++;
    print "Ce programme va se fermer, retrouver les log dans /newsite/tmp \n";
    print RAP "Programme $script vers:$vers d\' $moi\nfermer par utilisateur à $fr_date_now,\nbonne journée\n";
    close RAP || die "far toi encouler granda connassa rap $!";
    closedir RC || die "Fermeture de $path_tmp impossible (putain de merde) $!";
  }
  else {
    print "Vous avez entrer $repu ca remplacera $lnkbrut\n";
    $lnkbrut = $repu;
    $lnkbrt = $lnkbrut;
    ($lnknet, $encre)= split(/\#/, $lnkbrt);
    &chklnk;
    undef $repu;
    $userx = "";
    $v++;
    goto SCONTROL;
  }
}


sub reconstruire_ligne {
  my ($lines) = @_;

# on split tout ca a plat
  $tout = "@lines";
  @cop = split(//, $tout);


# balise $ouvert = 1 ==> vrai; 0 ==> faux
$ouvert = $tronquage = 0;
@ligne = @nwcop = "";
foreach $e(@cop) {
  if ($ouvert == 0) {
    $i++;
    if($e eq "<") {
      # signale qu'une balise est ouverte et pousse la ligne
      $ouvert = 1;
      push @ligne, $e;
    }
    elsif ($e eq "\n") {
      # pousse \n dans @ligne puis @ligne dans @nwcop et réinitialise @ligne
      push @ligne, $e;
      push @nwcop, @ligne;
      @ligne ="";
      $i = 0;
    }
    else {
      # pousse le caractère dans la ligne
      push @ligne, $e;
      }
    }
  # un balise à été ouverte donc passage en ouvert
  else {
    $i++;
    if ($e eq "\n") {
      # balise tronquées
      $tronquage = 1;
      $k++;
      }
    elsif ($e eq ">") {
      $ouvert = 0;
      if ($tronquage == 1) {
    # si tronqué pousser le caractère dans ligne et lui ajouter une fin de ligne
    # puis remettre à zero $ligne, $tronquage et ouvert
    push @ligne, "$e\n";
    push @nwcop, @ligne;
    $i = 0;
    @ligne = "";
    $tronquage = 0;
    }
      elsif ($tronquage == 0) {
    # si il n'y a pas eu de tronquage pousser dans ligne
    push @ligne, $e;
    }
      }
    else {
     # print "je passe en ouvert quelconque $i:$e:\n";
      # si c'est un caractere quelconque, le pousser dans ligne
      push @ligne, $e;
      }
    }
  }   
 
  $contenu = join('', @nwcop);
  @nwlines = $contenu;
}


sub decortique_file {

  # decortique le nom complet($lnkbrut) en lnknet, encre, rootfile et ext, sans toucher a lnkbrut et lnknet
  $lnkbrt = $lnkbrut;
  ($lnknet, $encre) = split(/\#/, $lnkbrt);
  $lnkt = $lnknet;
  ($rootfile, $ext) = split(/\./, $lnkt);
}


sub datefinefile {
  my ($file, $m_acces, $format_d)= @_;
 
  $datenum = ((stat($file))[$mode]); 
  (my $sec,my $min,my $heure,my $mjour,my $mois,my $annee,my $sjour,my $ajour,my $isdst) =  localtime($datenum);
  if ($mois <= 9) {
    $mois= "0" . ($mois+1);
  }
  if ($mjour <= 9) {
    $mjour = "0" . "$mjour";
  }
  if ($heure <= 9) {
    $heure = "0" . "$heure";
  }
  if ($min <= 9) {
    $min = "0" . "$min";
  }
  if ($sec <= 9) {
    $sec = "0" . "$sec";
  }
  my $cj = $lssjour[$sjour];
  my $pj = substr($cj, 0, 2);
  my $pm = substr("$lssmois[$mois]", 0 , 3);
  if ($annee < 100) {
    $pa = $annee;
  }
  elsif ($annee <=109) {
    $pa = "0" . ($annee-100);
  }
  else {
    $pa = ($annee-100);
  }
  if ($format_d == 1) {
    # format differants 1: 20100131-203001
    $fr_date_file = ($annee+=1900) . "$mois$mjour-$heure$min$sec";
    }
  elsif ($format_d == 2) {
    # format differants 2: 31/01/2010-20:30
    $fr_date_file = "$mjour\/$mois\/" . ($annee+=1900) . "-$heure:$min";
    }
  elsif ($format_d == 3) {
    # format differants 2: $fr_datenum_file = Di-31/01/2010-20:30:02
    $fr_date_file = "$pj-$mjour\/$mois\/" . ($annee+=1900) . "-$heure:$min:$sec";
    }
  elsif ($format_d == 4) {
    # format differants: $fr_dt_file = 31Jan10-20h
    $fr_date_file = "$mjour$pm" . "$pa" . "-$heure" . "h";
    }
  elsif ($format_d == 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 = "$lssjour[$sjour] $mjour $lssmois[$mois] " . ($annee+=1900) . " - $heure:$min:$sec";
    }
  return $fr_date_file;
  }


format STDOUT =
@<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<     @<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$na, $a, $nb, $b
.

# script Perl écrit par alain Adelmar alias alCoolfort
# ce script repare plus de 9 liens sur 10

END;