package FrDate;

our $VERSION = "1.3";
our @ISA = qw( Exporter );
our @EXPORT = qw( maintenant datefichier );
our @lsto = "";


sub maintenant {
  my($mod_affichage) = @_;
  
  @lsto = localtime(time);
  $now= 1;
  &convert_time;
}
	
sub datefichier {
  my($mod_affichage, $opd, $file)= @_;
  
  $now = 0;
  @st = stat($file);
  $atfs = $st[8];
  $mtfs = $st[9];
  $ctfs = $st[10];
  
  #-----------------choix des options 
  if ($opd == 1) {
    @lsto = localtime($mtfs);
    $lbl = "Modif";
    &convert_time;
  }
  elsif ($opd == 2) {
    @lsto = localtime($ctfs);
    $lbl = "Change";
    &convert_time;
  }
  elsif ($opd == 3) {
    $now = 1;
    @lsto = localtime($atfs);
    $lbl = "Acces";
    &convert_time;
    $frt = "$lbl " . "$frd" . " _"; 
    @lsto = localtime($mtfs);
    $lbl = "Modif";
    &convert_time;
    $frt += "$lbl " . "$frd" . " _";
    @lsto = localtime($ctfs);
    $lbl = "Change";
    &convert_time;
    $frt += "$lbl " . "$frd";
  }
  else {
    @lsto = localtime($atfs);
    $lbl = "Acces";
    &convert_time($mod_affichage, $opd, $file);
  }
}



sub convert_time {
  my($mod_affichage, $opd, $file)= @_;

  my @lsjour = qw(
		  Dimanche
		  Lundi
		  Mardi
		  Mercredi
		  Jeudi
		  Vendredi
		  Samedi
		  );
  for $i(0 ..6) {
    $fj{$i} = $lsjour[$i];
  }
  
  my @lsmois = qw(
		  Janvier
		  Février
		  Mars
		  Avril
		  Mai
		  Juin
		  Juillet
		  Aout
		  Septembre
		  Octobre
		  Novembre
		  Décembre
		  );
  
  for $i(0..11) {
    $fm{$i} = $lsmois[$i];
  }
  
  for (@lsto) {
    $sjour = "$fj{$lsto[6]}";
    $sjour_sm = "\l$sjour";
    $abrev_sjour = substr($sjour, 0, 3);
    $smois = "$fm{$lsto[4]}";
    $smois_sm = "\l$smois";
    $abrev_smois = substr($smois, 0, 3);
    if ($lsto[5] <= 100) {
      $paa = $lsto[5];
      $aa = "19" . "$lsto[5]";
      $haa=chr("$lsto[5]" -10);
    }
    else {
      $paa = ("$lsto[5]"-100);
      $aa = "200" . ("$lsto[5]"-100);
      $haa=chr("$lsto[5]" - 3); 
    }
    # mois idem localtime(x)[4] + 1 (because janvier = 0)
    if ($lsto[4] <= 8) {
      $mm = "0" . ("$lsto[4]" + 1);
      $hmm = chr("$lsto[4]" + 97);
    }
    else {
      $mm = ("$lsto[4]" + 1);
      $hmm = chr("$lsto[4]" + 97);
    }
    # jour idem localtime(x)[3] + 1 (because le 1 démarre à 0)
    if ($lsto[3] <= 8) {
      $jj = "0" . "$lsto[3]";
      $hjj = chr("$lsto[3]" + 65);
    }
    else {
      $jj = $lsto[3];
      $hjj = chr("$lsto[3]" + 97);
    }
    # les heures
    if ($lsto[2] <= 9) {
      $hh = "0" . "$lsto[2]";
      $hhh = chr("$lsto[2]" + 65);
    }
    else {
      $hh = $lsto[2];
      $hhh = chr("$lsto[2]" + 65);
    }
    # les minutes
    if ($lsto[1] <= 9) {
      $mn = "0" . "$lsto[1]";
      $hmn = chr("$lsto[1]" + 48);
    }
    else {
      $mn = $lsto[1];
      if ($lsto[1] <= 34) {
	$hmn = chr("$lsto[1]" + 65);
      }
      else {
	$hmn = chr("$lsto[1]" + 97);
      }
    }
    # les secondes
    if ($lsto[0] <= 9) {
      $ss = "0" . "$lsto[0]";
      $hss = chr("$lsto[0]" + 48);
    }
    else {
      $ss = $lsto[0];
      if ($lsto[1] <= 34) {
	$hss = chr("$lsto[0]" + 65);
      }
      else {
	$hss = chr("$lsto[0]" + 97);
      }
    }
  }
  
  if ($mod_affichage == 1) {
    if ($now == 1) {
      #Mardi 03 Mars 2004
      $frd = "$sjour $jj $smois $aa";
    }
    else {
      $frd = "$sjour $jj $smois $aa";
      return $frd;
    }
  }
  elsif ($mod_affichage == 2) {
    if ($now == 1) {
      #mardi 03 Mars 2004
      $frd = "$sjour_sm $jj $smois $aa";
    }
    else {
      $frd = "$sjour_sm $jj $smois $aa";
      return $frd;
    }
  }
  elsif ($mod_affichage == 3) {
    if ($now == 1) {
      # 1040309152528
      $fd = "$lsto[5]" . "$mm" . "$jj" . "$hh" . "$mn" . "$ss";
      return $fd;
    }
    else {
      $frd = "$lsto[5]" . "$mm" . "$jj" . "$hh" . "$mn" . "$ss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 4) {
    if ($now == 1) {
      # 20040309-XHU
      $fd = "$aa" . "$mm" . "$jj" . "$hhh" . "$hmn" . "$hss";
      return $fd;
    }
    else {
      $frd = "$aa" . "$mm" . "$jj" . "$hhh" . "$hmn" . "$hss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 5) {
    if ($now == 1) {
      # G-0309-HTY
      $fd = "$haa-" . "$mm" . "$jj-" . "$hhh" . "$hmn" . "$hss";
      return $fd;
    }
    else {
      $frd = "$haa-" . "$mm" . "$jj-" . "$hhh" . "$hmn" . "$hss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 6) {
    if ($now == 1) {
      # HMJU7X
      $fd = "$haa" . "$hmm" . "$hjj" . "$hhh" . "$hmn" . "$hss";
      return $fd;
    }
    else {
      $frd = "$haa" . "$hmm" . "$hjj" . "$hhh" . "$hmn" . "$hss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 7) {
    if ($now == 1) {
      # jeudi 18 Mars 2004 15:14:28
      $fd = "$sjour_sm  $jj $smois $aa" . " $hh:$mn:$ss";
      return $fd;
    }
    else {
      $frd = "$sjour_sm  $jj $smois $aa" . " $mn:$ss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 8) {
    if ($now == 1) {
      # lun 09 Oct 18h24:11
      $fd = "$abrev_sjour $jj $abrev_smois $hh" . "h$mn:" . "$ss";
      return $fd;
    }
    else {
      $frd = "$abrev_sjour $jj $abrev_smois $hh" . "h$mn:" . "$ss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 9) {
    if ($now == 1) {
      # lun 09 Oct
      $fd = "$abrev_sjour $jj $abrev_smois";
      return $fd;
    }
    else {
      $fd = "$abrev_sjour $jj $abrev_smois";
      return $frd;
    }
  }
  elsif ($mod_affichage == 10) {
    if ($now == 1) {
      # mardi 09/03/04 15:09:28
      $fd = "$sjour_sm $jj\/$mm\/$paa $hh:$mn:$ss";
      return $fd;
    }
    else {
      $frd = "$sjour_sm $jj\/$mm\/$paa $hh:$mn:$ss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 11) {
    if ($now == 1) {
      # Mardi 09 Jan 04 15:09:28
      $fd = "$sjour $jj $abrev_smois $paa $hh:$mn:$ss";
      return $fd;
    }
    else {
      $frd = "$sjour $jj $abrev_smois $paa $hh:$mn:$ss";
      return $frd;
    }
  }
  elsif ($mod_affichage == 12) {
    if ($now == 1) {
      # mardi 09 Jan 2004 14:30:28
      $fd = "$sjour_sm $jj $abrev_smois $aa $hh:$mn:$ss";
      return $fd;
    }
    else {
      $frd = "$lbl $sjour_sm $jj $abrev_smois $aa $hh:$mn:$ss";
      return $frd;
    }
  }
  else {
    if ($now == 1) {
      # mardi 09/03/2004 15:09:28
      $fd = "$sjour_sm $jj\/$mm\/$aa $hh:$mn:$ss";
      return $fd;
    }
    else {
      $frd = "$sjour_sm $jj\/$mm\/$aa $hh:$mn:$ss";
      return $frd;
    }
  }
}


END;


=head1 NOM

  frenchdate - donne l heure et la date en français

=head1 SYNTHAXE

	Use FrDate;
	maintenant($mod_affichage);                         # donne la date et l'heure du moment sous le format adéquat (0..12)
	datefile($mod_affichage, $opd, $file);             #  idem suivant $opd(accés,modif,change).
	

  # donne la date du fichier $file suivant ($opd: dernier access, modif, chang)
  # au format défini par $mod_affichage:
  # affichage date                      $opd  $mod_affichage
  # Mardi 09/01/2004 15:09:28         Defaut| Defaut  | désignation 
  # Mardi 03 Mars 2004                (3)     (1)       (date du dernier changement d'inode)
	# mardi 03 Mars 2004                (-)     (2)        (date de dernier accés)
  # 1040309152528                     (2)     (3)        (date de dernier accés)
	# 20040309-XHU                      ( )     (4)        (date de dernier accés)
  # H-0309-U7X                        (1)     (5)        (date de la derniére modification)
	# HTMXHU                            ( )     (6)        (date de dernier accés)
  # jeudi 18 Mars 2004 15:14:28       (3)     (7)        (date du dernier changement d'inode)
  # jeu 09 Oct 18h24:11               (1)     (8)        (date de la derniére modification)
	# Jeu 09 Oct 2004
  # Acces: mardi 09/03/04 15:09:28    ( )     (9)        (date de dernier accés)
	# Modif: lun 09 Oct 18h24:11				(1)    (10)        (date de la derniére modification)


Mercredi 11/12/2003 18:45 ou 20031211 ou 1031211184503 ou M-1211-UHX ou Mer 09 Oct 12h45:28, 
etc....

=head1 DESCRIPTION

  La variable scalaire retourné par le module sera une date en français formater selon votre besoin pour:

    B<la date du fichier> avec
    $frd = ffdt($file, $opd, $mod_affichage) ou
      B<$file> est le nom du fichier
      B<$opd> est un chiffre de 0 a 2 representant:
          0 date de dernier acces
          1 date de derniére modification
          2 date du dernier changement d inode
      B<$mod_affichage> est un chiffre de 0 a 6 representant:
        # mardi 09/03/2004 15:09:28           (Defaut)
        # mardi 03 Mars 2004                  (1)
        # 1040309152528                       (2)
        # HMJU7X                              (3)
        # jeudi 18 Mars 2004 15:14:28         (4)
        # jeudi 18h24mn et 11secondes         (5)
        # mardi 09/03/04 15:09:28             (6)

        pour 0 la date comme: Mercredi 11/12/2003 18:45     (par defaut)
        pour 1 la date comme: Mercredi 11 Decembre 2003  (pour la Secla)
        pour 2 la date comme: 20031211184503    (pour liste et filename)
		pour 3 la date comme:  AMJhms (en caractéres acsii triable)
		pour 4 la date comme:  jeudi 18h24mn et 11secondes
		pour 5 la date comme: AMJc (en caractére acsii triable comme AMJ et centieme de jour)

 expl: si je veux la date du dernier acces en format liste je demanderai:
 $file = $foo;
 $opd = 0;
 $mod_affichage =2;
 $frd = datefichier($mod_affichage, $opd, $file);
 
 pour savoir la date et l'heure du moment present:
 $fd = maintenant($mod_affichage);

=head1 AUTEUR

  Ce script à été écrit par Alain Adelmar aadelmar@free.fr
  publié sur http://aadelmar.free.fr/FrDate4File.html
  adresse : 6 rue de Tunis 33600 Pessac France

=cut
