#!/usr/bin/perl -w
# 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'afféctation et les incompatibilités dues *
# aux changements de systeme UNIX-Like=>M$ et vice-versa.          *
# Vérif des encres et ré-attribution du premier flag ou création   *
# d'une encre #top (si page existe sans flag). Corrige les fautes  *
# d'orthographes et les path erronés.                              *
# Version :1.12 | 27.02 2004  alain Adelmar Pessac aadelmar@free.fr*
# (modifications importante depuis v:1.10) - prep v2.0 la best     *
# Accepte le nom du répértoire à traiter en guise d'argument:      *
#------------------------------------------------------------------*
# usage:  vlnk.pl [-cu] [rep_source]                               *
#---------------------------------                                 *
# options:                                                         *
# -c (complet) marquera d'un tag "top" les pages html pas marquées *
# -u (update) insére la date de mise à jour, en gardant l'original *
#------------------------------------------------------------------*
# (script Perl pour environement M$ et UNIX-LIKE)                  *
# créé par alain Adelmar le 27.02.04 à Pessac 6 rue de Tunis 33600 *
#*******************************************************************

use Cwd;
$dir = cwd;

$mod_affichage = $opd = 5;
use FrDate;
$fd = &fdn;



#--------------- initialisation des variables -------------------------------- debut
$e_mailp = 'aadelmar@free.fr';
$countlnk = $cnta = $cntlnkhttp = $cntl = $cntlnknet = $cntlnkftp = $z = $c = 0;
$maintime = $frd;
$programmeur = "alain Adelmar"; 
$firstline = "Editer par " . "@ARGV" . " ce jour $frd :\n";
$x = "*-" x 25;
$x_down = " " x 47;
# $x_down = ("*-" x 24) . "||";                      # fioritures qui soulignes
$y = "__-__*" x 15;                                         # idem pour différencier
$al = "\t|     === A_l_a_i_n -\/\/- A_d_e_l_m_a_r ===      ||";    # pub perso
#--- explication pour l'utilisateur
$lbl = "\n\tCe 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";
$vrl = "\.\/vrl.log";
open VRL, ">$vrl" or die "Ouverture de $vrl impossible $!";

# et ----------------- sortie formatée pour l'affichage fichiers/tags --------- ok
format VRL_TOP =
 Fichier                     Flags                 Num
===============             ==============        =====
.

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

#création et ouverture d'un rep temporaire pour placer le nouveau site -------------- debut 
#-1-------(pour UNIX-Like) mettre 2 en commentaire.

$newsite = "$dir\/newsite";
$tmp = "$newsite\/tmp";
$path_tmp = "$tmp\/";
$fsr = "\/sorti_verylink_" . "$c" . "\.log";
#-2-------(pour Windows)   mettre 1 en commentaire.
#$newsite = "$dir\\newsite";
#$tmp = "$newsite\\tmp";
#$path_tmp = "$tmp\\";
#$
fsr = "$path_tmp" . "sorti_verylink_" . "$c" . "\.log";
#------------------------------------------------
open FSR, ">$fsr" or die "ouverture de $fsr impossible $!"; 
print FSR "récapitulatif de tout les liens avec encres\n$x\n\n";
print "\t$x\n$al\n\t" . "|" . "$x_down" . "||" . "\n\t$x\n\n$lbl\n";
#---------- choix du repertoire temporaire-------------\
my $q = 0;
while (-e $newsite) {
  $q++;
  $newsite += $q;
  mkdir $newsite,0777 or die "ouverture de $newsite impossible $!";
}
mkdir $tmp,0777 or die "ouverture de $newsite impossible $!";
print 'Un dossier ./newsite contiendra vos pages corrigées' . 
    "\n" . 'et ./newsite/tmp contiendra les logs de synthése' . "\n";
#--------------------------------------------------------------------------------------  fin


# -----------traitement argument - dossier a traiter ----------------------------------- debut
while (@ARGV) {
  if ($ARGV[0] =~ /^-/) {
    $_= s/-()/$1/;
    ($argv = "c") if ($ARGV[0]=~ /^c/);
    ($argv = "u") if ($ARGV[0]=~ /^u/);
    if ($ARGV[1]) {
      $d = $ARGV[1];
    }
  }
  elsif ($ARGV[0] =~ /\w*?/i) {
    $d = $ARGV[0];
  }
  else {
    print "usage: vlnk.pl [dossier_a_traiter]\n(made by $programmeur\n";
    #--------------------------demander quel repertoire traiter et verifier si il existe
    print "$x$x\n";
    print "Indiquez le dossier a traiter:\n"; 
    chomp($d =<STDIN>);
  }
}
#----------------------------------------------------------------------------------------- fin
&verifd;



#-----------verification et lecture du répértoire source --------------------- debut 
sub verifd {
  unless (-e $d) {
    print "Veuillez ré-entrer le chemin complet du dossier à traiter, expl:" . '/home/pub/monsite' . "\n";
    chomp($d = <STDIN>);
  }
}

#--------------juste pour recapitulatif
# $fout = "$tmp\/repV.log"; 
#----------ouverture du repertoire, assign de la list de file, et traitement file/file

opendir R, "$d" or die "Ouverture repertoire $d impossible $!"; 
@lsfile = (sort readdir R);
closedir R or die "Fermeture du repertoire R impossible $!";
print "$x$x\n";
# fait la copie du site dans un dossier temporaire pour éviter les erreurs
# puis récupére toute les encres possibles dans un hashage %h_tencre
&recup_all_tags;

# passe en revue page/page, ligne/ligne, $lien/lien les copie crées dans $path_tmp
# unlink @lsfile;
opendir RC, "$path_tmp" or die "Ouverture de $path_tmp impossible $!";
@files = (sort readdir RC);
               
foreach $file(@files) {
  #---- juste pour voir comment ca tourne ---- de là
  close FSR || die "fermeture de $fsr impossible $!";
  $c++;
  open FSR, ">$fsr" or die "ouverture de $fsr impossible $!";
  print "$firstline$x\n";
  #----------------------------------------------a là
  if ($file =~ /\.htm|\.dat|\.txt|\.log|html$/) {
    print "$x\n";
    &controle_file;
    &reparation;
    &compte_rendu;
    push @rep, $file;
  }
  #-------------facultatif
  $pfile = "\t$file\n\t" . '*******' . "\n"; 
  print FS $pfile;
  #--------------
}
closedir RC || die "Fermeture de $path_tmp impossible (putain de merde) $!"; 
#-----recherche des flags----


sub controle_file {
  #initialisation des variables
  my (@contenu)= "";
  
  $filesrc = "$d\\$file";
  $fs = "\.\/rap_vlnk_" . "$file" . "\.log";
  # a degager quand ok---------------
  open FS, ">$fs" or die "Ouverture de $fs impossible $!";
  #integrer FrDate ici
  print "\t$x\n$file\n";
  #----------------------------------
  open FI, "$filesrc" or die "Ouverture du fichier $file impossible $!";
  @contenu = <FI>;
  close FI || die "Fermeture impossible $!";
  foreach $line(@contenu) {
    my($countpl) = 0;
    my($nwl,$nwline)= "";
    
    my @lpl = split(/<\/a\>/, $line);
    my $w = 0;
    # pour chaque fraction de ligne contenant peut etre un lien (nombre d'element $w)
    foreach $plink(@lpl) {
      
      if ($plink=~ /<a\shref=\"(.*?)\"\>/i) {
	$countpl++;
	$lnkbrut = $1;
	$oldlb = $lnkbrut;
	print FS "$lnkbrut $countpl\n";
	if ($lnkbrut=~ /^mailto/) {
	  ($kk, $email) = split(/:/, $lnkbrut);
	  ($login, $fai) = split(/\@/, $email);
	  $cnta++;
	  print "login = $login et fai = $fai\n";
	  #------------------------modification perso
	  if ($email =~ /^a.?adelmar\@wanadoo\.fr/) {
	    $e_mailp = "aadelmar\@free\.fr";
	    $nwl =  s/()$email()/$1$e_mailp$2/;
	    print "modif d'adresse mail effectué sur $file fraction de ligne $nwl $cntl\n";
	  }
	}
	#--------lien vers news-groupes trouvé
	elsif ($lnkbrut=~ /^news/) {
	  ($kk, $nws) =split(/:/, $lnkbrut);
	  print "news-groupes trouvé $nws\n";
	  $nwl = $plink;
	}
	#--------------------http
	elsif ($lnkbrut=~ /^http:\/\//i) {
	  ($lnkhttp, $encre) = split(/\#/, $lnkbrut);
	  $cntlnkhttp++;
	  $prlnkhttp = "$file ligne:$cntl\t$lnkhttp\t$encre";
	  push @lnk_http, $prlnkhttp;
	  # ou en hashage
	  $h_lnkhttp{"$lnkhttp" . "_" . "$cntlnkhttp"} = $encre;
	  $nwl = $plink;
	}
	#------------------ftp
	elsif ($lnkbrut=~ /^ftp:\/\//i) {
	  ($lnkftp, $encre) = split(/\#/, $lnkbrut);
	  $cntlnkftp++;
	  $prlnkftp = "$file ligne:$cntl\t$lnkftp\t$encre"; 
	  push @lnk_ftp, $prlnkftp;	
	  #-------------- ou en hashage
	  $h_lnkftp{"$lnkftp" . "_" . "$cntlnkftp"} = $encre;
	  $nwl = $plink;
	}
	else {
	  # nettoyage du lnkbrut du chemin MS ou UNIX
	  if ($lnkbrut =~ /^\//) {
	    print FSR "trop long lnkbrut UNIX dans ( $file :l $cntl ) $lnkbrut \n";
	    @lsl = split(/\//, $lnkbrut);
	    $lnkbrut = pop @lsl;
	    $nwl =  s/()$oldlb()/($1)$lnkbrut($2)/;
	  }
	  elsif ($lnkbrut =~ /^\\/) {
	    print FSR "trop long lnkbrut MS dans ( $file :l $cntl ) $lnkbrut \n";
	    @lsl = split(/\\/, $lnkbrut);
	    $lnkbrut = pop @lsl;
	    $nwl =  s/()$oldlb()/($1)$lnkbrut($2)/;
	  }
	  # assignation des valeurs lnknet et encre
	  ($lnknet, $encre) = split(/\#/, $lnkbrut);
	  # $encrep = "#" . "$encre";
	  $cntlnknet++;
	  $prlnknet = "$file ligne:" . "$cntl\t" . "$lnknet\t" . "$encre";
	  push @lnk_net, $prlnknet;      # pour avoir une liste de liens par pages
	  #------------------------------controle les ceux qui fonctionne dessuite
	  # ceux qui pointent vers une autre page existante avec encre
	  if (exists ${{reverse %h_fntag}} {$lnkbrut}) {
	    print FSR "gagné lien n°:$v\n";
	    $v++;
	    $nwl = $plink;
	  } 
	  # ceux qui pointe sur un fichier seul (sans encre) (a controler because il y a in log)
	  elsif (exists ${{reverse %h_fst}} {$lnkbrut}) {
	    print FSR "gagné lien n°:$v\n";
	    $v++;
	    undef $encre;
	    $nwl = $plink;
	  }
	  # ceux qui pointent sur eux meme
	  elsif (exists ${{reverse %h_tag}} {$lnkbrut}) {
	    print FSR "gagné en local avec h_fntag sur eux meme n°:$v\n";
	    $v++;
	    $nwl = $plink;
	  }
	  #-----------a degager si non sorti because 2 ctrl au dessus fait pareil (ligne 182)
	  elsif (exists ${{reverse %h_fst}} {$lnknet}) {
	    print FSR "xxxxxxxx rare xxx gagné en local avec h_fst pas d encre n°:$v\n";
	    $v++;
	    $nwl = $plink;
	  }
	  #------------------- pour traquef
	  else {
	    print FSR "pour traquef $file:" . "$lnknet:" . "$encre ligne $cntl\n";
	    &traquef;
	    $h_lnknet{$lnknet . ":" . $cntlnknet} = $encre;
#	       		# c'est la que ca repare (encre doit avoir un diese si linknet pas "")
#		       	print FS "avant $line\n";
#		      	&reecrirelaligne;
#		    	print FS "aprés $line\n";
	  }
	}
#	       	# il faut que $line soit impeccable
#	       	push @nwlines, $line;
      }
      else {
      LABELPARDEF:print "on continue\n";
	$nwl = $plink;
	
	
#	     	# pousser le reste dans le nouveau document
#	      	LABELPARDEF:$err++;$fr;
#	       	&reecrirelaligne;
#	       	push @nwlines, $line;
#	       	$cntl = 0;
#	       	undef $encre;
      }
      push @nwl, $nwl;
    }
    $nwline = join('</a>', @nwl);
    @nwl = "";
    push @nwcontenu, $nwline;
  }
}



sub traquef {
  
  # ici traité les local (if ($lnknet eq "") { &traite_encre}
  # -----------pour controle_encre definir full_filname
 VOIR:print FSR "ltf";
   $full_filename = "$d\\$lnknet";
   if (-e $full_filename) {
     # ici tombe les fichiers qui ont, soit just lnknet (donc sans diese) soit l'encre
     print FS "Ce linknet | $lnknet | existe donc, l'encre | $encre | pourkoi pas glop avec h\n";
     print FSR "Ce linknet | $lnknet | existe donc, l'encre | $encre | pourkoi pas glop avec h\n";
     $gf++;
     unless (regarde) {
       &control_encre;
     }
     $nwl = $plink;
     #--------------ici définition de $nwl
   }
   else {
     print FSR "pb lnknet a resoudre / user dans ( $file :l $cntl ) $lnknet|$encre \n";
     &reparef;
     
   }
 }

sub compte_rendu {
  $file_cr= "$newsite" . "\/rap" . "$ir.log";
  
  open FRAP, ">$file_cr" or die "Ouverture de $file_cr impossible $!";
  print "$firstline$x\n";
  print FRAP "Liens http de $file trouvé avec liste:\n";
  foreach $lk(@lnk_http) {
    print FRAP "adresse Web: $lk\n";
  }
  print FRAP "\n$x\navec le hashage maintenant\n";
  while ( ($key, $value) = each %h_lnkhttp) {
    print FRAP "$key = $value\n";
  }
  print FRAP "\n$x\n";
  print FRAP "liens ftp de $file trouvé:\n";
  foreach $lk(@lnk_ftp) {
    print FRAP "adresse ftp: $lk\n";
  }
  print FRAP "\n$x\navec hashage now:\n";
  while ( ($key, $value) = each %h_lnkftp) {
    print FRAP "$key = $value\n";
  }
  print FRAP "\n$x\n";
  print FRAP "liens de $file trouvé:\n";
  foreach $lk(@lnk_net) {
    print FRAP "liens vers la page: $lk\n";
  }
  print FRAP "$x\navec le hashage now\n";
  while ( ($key, $value) = each %h_lnknet) {
    print FRAP "$key = $value\n";
  }
  #-----------login now----
  print FRAP "$x\n\tlogin trouvé:\n";
  $login = join("\n", @man2mail);
  print FRAP "$login\n";
  print FRAP "ayant pour fai :\n";
  
  #------------stat
  print FRAP "$x\n";
  print FRAP "Sur un total de $cnttl lignes controler\npour un total de $countlnk liens dans le fichier $file :\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 "$cntlnknet sur $file\n";
  print FRAP "recap total de $cntlnknet liens \/page:\n$gf bon adressage\n$ef erreur adressage\n$fr erreur adressage fichier réparer\n$eb bonne encre\n$ee erreur encre\n$err encre reparrer\n";
  $filos = join("\n", @rep);
  print FRAP "effectuer sur les fichiers:\n" . "\n$filos\n$x\n";  #ca marche
  print FRAP "fait le $maintime\n";
  close FRAP || die "dreumer ca bloque $!";
  # --------------------------------remise a zero de nwlines et incremente index rapport
  @nwlines = "";
  $ir++;
}

sub reparef {
  print "$y\nProbléme:dans traquef (page non reconnu):file:$filesrc ligne:$cntl\nAucune correspondance pour le lien:\n\t$lnknet: et ou l'encre $encre\nchoisissez dans la liste ci-dessous puis\n[0 99] entrer le numero à droite du fichier vers qui il doit pointer:\n[Enter] - Si vous désirez laisser en l'etat\nR:monlien_a_ne_pas_verifier - Si vous entrez un substitut et que vous ne voulez pas qu'il soit vérifié\n";
  print "$x\nregader la liste des fichiers\n";
  $ef++;
  $cp= substr($lnknet, 0 , 1);
  $num_sel = 0;
  foreach $file(@reph) {
    if ($file =~ /^$cp/i) {
      print "$file \t$num_sel\n";
      push @numf, $file;
      $num_sel++;
    }
  }
  print "\n\nNom du fichier désigné:";
  $user_lnknet = <STDIN>;
  chomp $user_lnknet;
  if ($user_lnknet =~ /\d/) {
    $lnknet = $numf[$user_lnknet];
    print "$x\n$lnknet\n";
    unless (regarde) {
      &control_encre;
    }
    @numf = "";
    $fr++;
    goto LABELPARDEF;
  }
  elsif ($user_lnknet=~ /^R:\w/) {
    ($kk, $lnknet)=split(/R:/, $user_lnknet);
    $fr++;
    goto LABELPARDEF;
  }
  elsif ($user_lnknet eq "") {
    $fr++;
    goto LABELPARDEF;
  }
  else {
    $lnknet = $user_lnknet;
    &traquef;
  }
}

sub elencre {
  # ici simplement mettre un controle pour voir si ca marche sinon poursuivre
  print FS "elencre $file $cntl | $lnknet | $encre\n";
  print "$y\nProbléme:d'encre (non reconnu):file:$filesrc ligne:$cntl\nAucune correspondance pour l'encre:\n\t $encre\nchoisissez dans la liste ci-dessous puis\n[#] pour laisser tel que c'est sans vérifications \n[0 99] entrer le numero à droite du tag proposé:\n[Enter] - Si vous désirez par defaut (premiere encre trouver dans $lnknet)\nR:mon_encrea_ne_pas_verifier - Si vous entrez un substitut et que vous ne voulez pas qu'il soit vérifié\n";
  print "$x\nregader la liste des encres proposés\n";
  $ee++;
  $cp = substr($lnknet, 0 , 1);
  $num_sel = 0;
  for $ve(values %h_fntag) {
    ($tmplnknet, $tmpencre) = split(/\#/, $ve);
    if ($tmplnknet =~ /^$cp/) {
      print "$tmplnknet\t$tmpencre\t\t$num_sel\n";
      push @numf, $ve;
      $num_sel++;
    }
  }
  print "ou l'encre par defaut: $p_encre\t$num_sel\n";
  print "\n\nNom de l encre désigné:";
  $user_encre = <STDIN>;
  chomp $user_encre;
  if ($user_encre =~ /\d/) {
    $encre = "$numf[$user_lnknet]";
    print "$encre\n";
    @numf = "";
    $fr++;
    goto LABELPARDEF;
  }
  else {
    $encre = "$user_encre";
    goto LABELPARDEF;
  }
}

sub control_encre {
  if ($encre eq "") {
    $nwl = $plink;
  }
  elsif ($d =~ /\.?\\?/) {
    # degager la merde devant
    $nwl =  s/()$oldlb()/($1)$lnkbrut($2)/;
  }
  else {
    open FC, "$full_filename" or die "Ouverture de $lnknet impossible $!";
    @cible = <FC>;
    close FC || die "fremeture impossible $!";
    #---------chercher une encre2secour | a voir dessous
    $po = 0;
    foreach $el(@cible) {
      if ($po == 0) {
	if ( $el=~ /<a\sname="$encre"/i ) {
	  $eb++;
	  print "cool $encre a été trouvé sur $full_filename ligne $cntl\n";
	  goto LABELPARDEF;
	}
	elsif ($el =~ /<a\sname="(.*?)"/i) {
	  $def_encre = $1;
	  $po++;
	}
      }
      else {
	if ($el =~ /<a\sname="$encre"/i) {
	  $eb++;
	  print "cool mon $encre a été trouvé sur $full_filename ligne $cntl\n";
	  goto LABELPARDEF;
	}
      }
    }
  }
  if ($po == 0) {
    # --- je ne sais pas si je dois imposer une encre?
    $p_encre = "\#top";
  }
  else {
    $p_encre = $def_encre;
  }
  $err++;
  $ee++;
  &elencre;
}


sub recup_all_tags {
  #--activer format VRL et stockage de toutes les encres de tout les fichiers dans vrl.log
  # voir les variables  du script dans vrlk_var.log
  #
  $vrl = select(VRL);
  $~ = "VRL";
  $^ = "VRL_TOP";
  select ($vrl);
  
  
  foreach $file(@lsfile) {	  
    # reinitialisation de $avec_tag
    $avec_tag = 0;
    # encre pointant juste sur un fichier (images)
    $h_tencre{$z}= "$file";
    $z++;
    # re-ajouter le path au nom de fichier
    if ($d =~ /\/$/) {
      $ftagsrc = "$d" . "$file";
    }
    else {
      $ftagsrc = "$d\/$file";
    }	
    $ftagsrc = "$d" . "$file";
    if ($file =~ /\.h?tml?$/) {  # vérifier si tout passe (html, tml, htm, xml, etc..)
      open FT, "$ftagsrc" or die "Ouverture du fichier $file impossible $!";
      @lines = <FT>;
      close FT || die "Fermeture impossible $!";
      foreach $line(@lines) {
	if ($line =~ /<body\>/i) {
	  # traitement de l'option c et u en prevision (pour pas reouvrir)
	  if ($argv eq "c") {
	    $line = $line . '\n<a name="_top">' . "\n";
	    push @copim, $line;
	  }
	  elsif ($argv eq "u") {
	    $line = $line . '\n<-- mise à jour du document par ' . "$ARGV[-1]" . "le $fd \ninitialement daté du $frd" . "\n";
	    push @copim, $line;
	  }
	  else {
	    &cherche_encre;
	    push @copim, $line;
	  }
        }
	else {
	  &cherche_encre;
	  push @copim, $line;
	  $linetag++;
        }      
      }
      if ($avec_tag == 0) {
	# --- fichier existant sans tag--- si option -c ajouter "top" si -u ajouter "mise a jour"
	# mais tout est fait dans @copim
	$copie = "$tmp\/" . "$file";
	open FC, ">$copie" or die "Ouverture de $copie impossible $!";
	print FC "@copim";
	close FC || die "Fermeture de $copie impossible $!";
	
	$h_tencre{$z}= "$file";
	$h_fst{$z}= "$file";
	$z++;
      }
      # en rab puissque deja déclarer apres foreach file a degager
      else {
	  $avec_tag = 0;
      }
     @copim = "";	
      #      $avec_tag = 0;
      #			push @reph, $file;
    }
    
  }
  #--------surement a degager mais voir diff avec FAT
  $fut = "$path_tmp" . "vero.log";
  open FUT, ">$fut" or die "Ouverture de $fut impossible $!";
  $lsla = join("\n", @lsctag);
  print FUT "fichier:n°ligne:encre:compteur\n$lsla";
  #-------------------------------a degager quand pris en compte---voici les trois hachage
  print FUT "$x\nvoici les trois hachage:\nh_fntag\n";
  while (($zo, $hf) = each %h_fntag) {
    print FUT "$hf\n";
  }
  print FUT "$x\nh_fst\n";
  while (($zo, $ht) = each %h_fst) {
    print FUT "$ht\n";
  }
  print FUT "$x\nh_tag\n";
  while (($zo, $htag) = each %h_tag) {
    print FUT "$htag\n";
  }
  
  #-----------------------------------
  close FUT || die "Oups $fut ne peut pas ce fermer $!";
  
  close VRL || die "double dremmer closure of $vrl not possibilé $!";
}

sub reparation {
  $fcible = "$newsite\/$file";
  open FR, ">$fcible" or die "Ouverture de $fcible impossible $!";
  print FR @nwcontenu;
  close FR || die "Fermeture de $fcible impossible $!";
}

sub reecrirelaligne {
  if ($lnknet == "") {
    $lnkgood = "$encre";
  }
  elsif ($encre == "") {
    $lnkgood = "$lnknet";
  }
  else {
    $lnkgood = "$lnknet" . "#" . "$encre";
  }
  $nwl =~ s/()$lnkbrut()/($1)$lnkgood($2)/;
}

sub cherche_encre {
  if ($line=~ /<a\sname="(.*?)"/i) {
    $avec_tag++;    # marquer si le fichier à un tag, si il n'en a pas le marquer (option c)
    $tag = $1;
    $fz = "$file:$linetag:$tag:$z";
    # --- encre seule pour lien pointant a l'interieur de son fichier
    $h_tencre{$z}= '#' . "$tag";    # peut etre enlevé la ligne dessous si celle là fonctione
    $h_tag{$z}= "#" . "$tag";
    # --- liste composant un lien pointant sur un tag de ce meme fichier
    $h_complet{$z} = "$file" . '#' . "$tag";
    $h_tencre{$z}= "$file" . "#" . "$tag";
    write(VRL);
    push @lsctag, $fz;
    $z++;
  }
}

sub regarde {
  
  $lnktmp = "$lnknet" . "#" . "$encre";
  $lnktmpe = "#" . "$encre";
  (print FS "cool ca marche $v\n" and ($nwl = $plink) and return 1) if (exists ${{reverse %h_fntag}} {$lnktmp});
  (print FS "cool ca marche $v\n" and ($nwl = $plink) and return 1) if (exists ${{reverse %h_fst}} {$lnknet});
  (print FS "cool ca marche $v\n" and ($nwl = $plink) and return 1) if (exists ${{reverse %h_tag}} {$lnktmpe});
  if ($encre eq "") {
    return 1;
  }
  else {
    return 0;
  }
}

format VRL =
@<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<< @<<<<
$file, $tag, $z
.
    
END;
