#!/usr/bin/perl -w
# remd: aj "Ajoute au Journal". Est un script permettant les "postit" il *
# edite vos notes, log, etc ... en mode console. Au premier lancement il *
# initialise un dossier (HOME~/journal) ou il centralisera vos notes     *
# ainsi qu'un fichier journal.html, permettant d'y acceder dynamiquement *
# En cas d'oubli, il sauvegardera automatiquement votre note dans le rep *
#  ~/journal/trav_date.log, ajoute une lien dynamique dans la rubrique   *
# voulu du fichier Journal.html.                                         *
# rubriques défini pour le moment: (programmation, gestion de fichier et *
# divers) appelé réspéctivement par l'option -p -g -d (par defaut) donc: *
#                                                                        *
# usage: aj [-rdgp][nom_du_fichier]                                      *
#    -r (restreint) affiche un récapitulatif (debut ...fin) => 8lignes   *
#       alors que par defaut il affiche la totalitée du fichier.         *
#                                                                        *
# Il accepte le nom de fichier en arguments et s'utilise depuis le shell *
#------------------------------------------------------------------------*
# concu & écrit par alain Adelmar       mailto: aadelmar@free.fr         *
#*************************************************************************
# Fonctionne sur Environnement Linux, Windows, Cgwin                     *
# Cette version tourne bien et se suffit (pas besoin de FrDate.pm)       *
# Certe la prochaine sera mieux écrite car j'ai honte quand je relis ce  *
# code (trés maladroit) mais ca tourne, alors que demande le peuple...   *
# realease du 18 Mai 2006 tiré de la version 2.03 du 19 Fév 2005         *
#------------------------------------------------------------------------*
#$ID$
$vers = "2.05";

use Cwd;
$dir = cwd;

# Initialisation des différantes variables ***************
$x = ("x*" x 34) . "\n";
$path1="";
$somedate = '<A NAME="sum_date"><BR>';
@debut = @interm = @somd;
$prems = $travail = $argv = $deb = 0;
$auteur = "Alain Adelmar\naadelmar\@free.fr\n";

# pour l'adressage/les systeme UNIX, Linux, cygwin ou autre (/) et ceux de M$ (\)
my @gnul = ( "\\", "\/");   #pas mal because $gnul[$gnus] sera toujours bon, je suis trop fort
my $gnus = 0;
my $cong= "this is a real gnu OS, congratulation\n";
if ($0 =~ /[msys|cygwin|linux]$/) {
  $gnus++;
  print "$cong";
  }
elsif ($dir =~ /\//) {
  $gnus++;
  print "$cong";
  }
else {
  print "Vous etes sur une machine Petite et Molle (MicroSoft), beuuurk...\n";
  print "enfin quoi, sur un OS de merde\n";
  print "gnus ne vaut que $gnus, et en plus, vos fichiers sont du style:\n";
  print "C:" . "$gnul[$gnus]" . "caca" . "$gnul[$gnus]boudin au lieu de /super/extra\n os: $^O \n";
  print "Mais $0 fonctionnera tout de meme sur cette grosse chiote de systeme\n";
  }
my $gnup = $gnul[$gnus];


$prompt = "Entrer votre choix: (0)nouveau, (1)ouvrir, (2)sauvegarder\n(q)quitter ou (Enter) pour continuez\.\.\.\n";
# initialisé à

undef $choix;
my $filename = "";
my $filetmp = "";
#------- format de date pour file (normal = aaammjj | complet = aaammjj:%%%)

@lsjour = qw(
	     Dimanche
	     Lundi
	     Mardi
	     Mercredi
	     Jeudi
	     Vendredi
	     Samedi
	    );

for $i(0 ..6) {
  $fj{$i} = $lsjour[$i];
}

$min =(localtime(time()))[1];
$h =(localtime(time()))[2];
$an =(localtime(time()))[5];
$sjour =(localtime(time()))[6];
$fjour = $fj{$sjour};
$datos = localtime (time);  # au cas ou
@lstnow = localtime (time());
$j = $lstnow[3];
$m = $lstnow[4]+1;
if ($min <= 9) {
  $min = "0" . $min;
}
if ($h <= 9) {
  $h= "0" . $h;
}
if ($j <= 9) {
  $j= "0" . $j;
}
if ($m <= 9) {
  $m = "0" . $m;
}
if ($an >= 100) {
  $an=~ s/1()/20/;
}
else {
  $an= "1" . $an;
}
#----------- pour centieme de journée exp: 25 = 25% de journée ou 25 quart d'heures (99 = 1440min = 24h)
$tmp_h2m = ($h * 60) + $min;

# ---- pour $qdh (quantité de jour exprimé de 01~99) ------
$qdh = int ($tmp_h2m/14.5); # pour avoir le centieme de journée sur 2chiffres de 01 à 99
if ($qdh <= 9) {
  $qdh = "0" . "$qdh";
}

# ---------- pour $qdh (quantité de jour exprimé de 01~99) ------- uncomment

if ($qdh <= 9) {
  $qdh = "0" . "$qdh";
}
# ---------- pour $qdm (quantité de jour exprimé de 001~999)------ 

$qdm = int ($tmp_h2m/1.44); # pour avoir le milliéme de journée sur 3chiffres de 1 à 999
if ($qdm <= 9) {
  $qdm = "00" . "$qdm";
}
elsif ($qdm <= 99) {
  $qdm = "0" . "$qdm";
}

#---------------------------------------------------------------------------------
$ma_date_v = "$fjour  $j\/" . "$m\/" . "$an" . ":" . "$h" . ":$min"; # Mercredi 30/07/2003 17:30
$ma_date = "$an" . "$m" . "$j" . ":" . "$qdh";                       # 20030730:72
$ma_date_h = "$an" . "$m" . "$j" . ":" . "$qdm";                       # 20030730:726
$dt = $ma_date_v;

#print "ma_date = $ma_date | ma_date_v = $ma_date_v | qdh = $qdh | dt = $dt\n";

$bienvenu = "$x\tx $dt x\n$x\nBienvenu sur l'eéditeur aled\n  ecris par Adelmar alainr\nTaper Ctr-D pour sortir\n\n$x\n\n";
&verifj;

#-- arg & option possible usage: alEd [-dgp] [--h,--heure] [nom_de_fichier]
if (defined $ARGV[0]) {
  foreach $_ (@ARGV) {
    ($arg = $_ and &traite_mode($arg)) if /^-\w/;
    ($ma_date = $ma_date_h) if /^--h/;
    if ($_ =~ /\w{3,}.*?$/) {
      $filename = $_;
      $argv++;
      &ouvrir($filename);
    }
  }
}
else {
  print "Usage:\taj [-pgd] [nom_de_fichier]\n";
  $argv = 0;
}

#$bienvenu = "$x\tx $dt x\n$x\nBienvenu sur l'eéditeur aled\n  ecrispar Adelmar alainr\nTaper Ctr-D pour sortir\n\n$x\n\n";
&menu;

sub menu {
  #&verifj;
  print "$prompt";
  chomp($choix = <STDIN>);
  #-----------------
  while($choix ne "q") {
    if($choix eq "1") {
      &watarg;
      undef $choix;
      &ouvrir;
    } 
    elsif($choix eq "2"){
      undef $choix;
      &sauv;
    }
    else {
      &watarg;
      undef $choix;
      &nouveau;
    }
  }
  die "$x\nTchao !!! bonne journnee\n$x\n";
}



sub nouveau {
  print "$bienvenu";
  @contenu = <STDIN>;
  print "si vous ne sauver pas votre travail\nou il le sera (par defaut) en tant que trav_" . "$ma_date\n";
  $filetmp = "$dir_journal$gnup" . "trav_" . "$ma_date" . "\.log";
  $file = "\~$gnup" . "trav_" . "$ma_date" . "\.log";
  &lbling;
  #-----ajout a journal.html---
  &ajout_lnk($filetmp);
  open FTMP, ">$filetmp" or die "Ouverture impossible $!";
  print "$x\nEdite automatiquement par alEd le: $dt --\>\n$x\n\n";
  print FTMP @contenu;
  close FTMP or die "fermeture a l'os gros_caca $!";
  $travail++;
  &menu;
}

sub ouvrir {
  print "ouverture de $filename\n";
  if ($argv == 0) {
    &lequel;
  }
  $argv = 0 ;
  unless (-e $filename) {
    &lequel;
  }
  # sortir le path du fichier ouvert
  @rep = split(/$gnup/, $filename);
  $file = pop @rep;           # nom du fichier seul
  $path1 = join("$gnup", @rep);   # rep de travail
  #------------------------------------
  print "alEd va ouvrir $filename pour vous\n";
  open FO, "<$filename" or die "Ouverture impossible $!";
  @contenu = <FO>;
  &lbling;
  close FO or die "fermeture impossible $!";

  # printer le fichier a completer suivant l'option
  if ($argv =~ /^c/) {
    my $u = my $fin = 0;
    my $pl;
    my $numel;
    foreach $ligne(@contenu) {
      next if ($ligne eq "");
      if ($u <= 3) {
	print $ligne;
	$u++;
      }
      elsif ($u == 4 & $fin == 0) {
	$pl = "\." x 15;
	print "$pl" . "\n";
	for ($i = 3; $i == 0; $i--) {
	  $numel = $#contenuf;
	  $dl = $contenuf[$numel - $i];
	  print "$dl" . "\n";
	}
      }
    }
  }
  else {
    foreach $ligne(@contenu) {
      print $ligne;
    }
  }

  print "\n";
  print "$bienvenu\n";
  @nwcontenu = <STDIN>;
  push @contenu, @nwcontenu;
  # ---on sauvegarde quand même dans journal
  $filetmp = "$dir_journal$gnup" . "trav_" . "$ma_date" . "\.log";
  open FTMP, ">$filetmp" or die "Ouverture impossible $!";
  print "$x\nsup à $file édite automatiquement par alEd le: $dt --\>\n$x\n";
  print FTMP @contenu;
  close FTMP or die "Makash Oualou pour fermer $file \non\nl\'a\ndans\nl\'os\n$x\n $!";
  #---------------------------------------et on demande si on veut aussi sauver sur l'original
  print "voulez vous sauver l\'ensemble du travail sur:\n [Oui] le fichier d\'origine $filename\n[Non] (par defaut) sur un fichier temporaire\n [nom_du_fichier] donner un nom pour sauvegarder ce fichier\n Récapitulation :\[Oui-Non-nom_du_nouveau_fichier]?\n";
  chomp($respond = <STDIN>);
  if($respond =~ /^o|oui/i) {
    print "$filename\n";
    &ajout_lnk($filename);
    open FO, ">$filename" or die "Ouverture impossible $!";
    print FO @contenu;
    close FO or die "fermeture impossible $!";
    # placer ici le moyen de copier $filename dans jrnl_perso et effacer trav_date ($filtmp)
    # $newdir = "$dir$gnup" . "jrnl_perso$gnup";
  }
  elsif ($respond =~ /^n|non/i) {
    $filetmp = "$dir_journal$gnup" . "trav_" . "$ma_date" . "\.log";
    print "Votre travail a eéteé sauver dans $filetmp\n";
    #-----ajout a journal.html---
    &ajout_lnk($filetmp);
  }
  else {
    if ($respond !~ /^"\.\/\w"|\w{4,}/) {
      s/\.\/()/$1/;
      $respond = "$dir$gnup$respond";
    }
    while (-e $respond) {
      print "attention, un fichier existe déjà sous ce nom de fichier,\nVeuillez changer de nom\n";
      chomp ($respond = <STDIN>);
    }
    $filename = $respond;
    #-----ajout a journal.html---
    &ajout_lnk($filetmp);
  }
  &menu;
}

sub sauv {
  system ('clear');
  print "\nentrez un nom pour votre travail\n";
  #-----ici tronquer le debut du fichier deux lignes pour ce rappeller
  #---plutot que @ (voir sysread ou troncate ou (seek et pop)
  print "\n" . @contenu . "\nPour ce travail\nnom du fichier:\t";
  $filename = <STDIN>;
  chomp $filename;
  if (path1 ne "") {
    print "voulez vous le sauver sur $path1$gnup$filename\n";
    $yes = <STDIN>;
    chomp $yes;
    if($yes =~ /^y|o/i) {
      $filename = "$path1$gnup$filename";
    }
    else {
      $filename = "$dir_journal" . "\/$filename";
    }
  }
  # controler si un fichier n'a pas le meme nom
  if (-e $filename) {
    ($file, $ext)= split(/./, $filename);
    $filename = "$file" . "_" . "$ma_date" . "\.$ext";
    $filetmp = $filename;
    #-----ajout a journal.html---
    &ajout_lnk($filetmp);
    print "Votre travail sera sauvegarder sous $filename\n";
    open(FO, ">$filename") or die "Ouverture impossible $!";
    print "$x\nEdite automatiquement par alEd le: $dt --\>\n$x\n\n";
    print FO @contenu;
    
    close FO || die "fermeture impossible $!";
    $travail--;
    &menu;
  }
  else {
    print "Votre travail sera sauvegarder sous $filename\n";
    $filetmp = $filename;
    #-----ajout a journal.html---
    &ajout_lnk($filetmp);
    open(F, ">$filetmp") or die "Ouverture impossible $!";
    print F "$x\nEdite automatiquement par alEd le: $dt --\>\n$x\n\n";
    print F @contenu;
    close F || die "fermeture impossible $!";
    $travail--;
  }
  &menu;
}

sub lequel {
  #--- permettre l'ouverture d'un fichier sans le path pour HOME et ~/journal
  print "cacaouette\n";
  if ($filename !~ /^\//) {
    if (!( -e "$dir\/$filename")) {
      
      $filename = "$dir_journal" . "\/$filename";
    }
    else {
      $filename = "$dir" . "\/$filename";
    }
  }
  while (!(-e $filename)) {
    print "Quel fichier desirez vous ouvrir:\n";
    $filename = <STDIN>;
    chomp $filename;
  }

}

sub eb_sauve_alors {
  print "Sauvegarder votre travail d'abord\n";
  &sauv;
}

 # Ce petit programme est une petite merveille 
 # alain Adelmar, 12 Mai 2003, aadelmar@free.fr


sub ajout_lnk($filetmp) {
  my($filetmp)= @_;
  @rep = split(/\//, $filetmp);
  $file = pop @rep;
  $path1 = join('/', @rep);
  
  $ajout_jrnl = "<A HREF=\"$filetmp\"\>$filetmp<\/A\>\t =\>\t <font color=\"#666666\"\><I\>fait le<\/I\> $dt<\/font color=\"#666666\"\>\n<BR\>";
  $recap_date = "<A HREF=\"$filetmp\"\>$file<\/A\>\t" . '.....' . "Date : $datos\n<BR\>";
 # $somedate = "<A NAME=\"sum_date\"";

  open OLD, "<$old" or die "Ouverture de $old impossible $!";
  @contenu_jrnl = <OLD>;
  close OLD || die "Fermeture de $old impossible $!";

  #open NEW, ">$new" or die "Ouverture de $journal impossible $!";

  if ($arg eq "p") {
    $mode = "<A NAME=\"end_puuu\"\><BR\>";
    &coupe;
  }
  elsif ($arg eq "g") {
    $mode = "<A NAME=\"end_guuu\"\><BR\>";
    &coupe;
  }
  else {
    $mode = "<A NAME=\"end_duuu\"\><BR\>";
    &coupe;
  }

  #  print NEW "@debut\n";
  #  print NEW "$ajout_jrnl\n";
  #  print NEW "@interm\n";
  #  print NEW "$recap_date\n";
  #  print NEW "@somd\n";

  #  close NEW || die "Fermeture de $journal impossible $!";

  rename($old, $bak) or die "can't rename $old to $bak: $!";
  rename($new, $old) or die "can't rename $new to $old: $!";
}

#--------------si nouveau au dessus pas marcher oter et uncommente dessous

#system ('clear'); 
# remet une page blanche au shell.

sub lbling {
  $rem = "# remd: $filename";
  $ajout = "\n$rem\n#== ajout a $file éffectué par alEd le :$dt ==\>\n";
   push @contenu, $ajout;
}

sub traite_mode($arg) {
  $arg = $_;
  $arg =~ s/-//;
  print "votre choix $arg\n";
}

#--------ici création du fichier journal. html
sub init_journal {
  unless (-e $dir_journal) {
    mkdir $dir_journal || die "Ouverture du repertoire $journal impossible $!";
  }

  $lbl = "<HTML\>\n<HEAD\>\n<TITLE\>Journal des modifications</TITLE\>\n\t<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text\/html\; charset=ISO\-8859\-1\"\>\n\t<LINK REV=\"made\" HREF=\"mailto:aadelmar\@free.fr\"\>\n</HEAD\>\n<BODY\>\n<A NAME=\"_top\"\><H1\><U\><CENTER\>Journal &eacute;dit&eacute; par alEd</CENTER\><\/U\><\/H1\>\n<BR\><hr WIDTH=\"100%\"\>Ce journal est créer par <I\><B\>alEd<\/I\><\/B\> (<I\>script Perl<\/I\>). Il vous permettra d\'accéder à tout les documents cr&eacute;&eacute;nt par alEd.\n<BR\>Qui ce veux &ecirc;tre un &eacute;diteur style \"<I\>carnet de note<\/I\>\" ou \"<I\>pense b&ecirc;te<\/I\>\".<BR\>Grace à son jeu d\'options (<B\>-p<\/B\> (pour programmation), <B\>-g<\/B\> (pour gestion) et <B\>-d<\/B\> (pour divers (<I\>par defaut<\/I\>))) il classe vos notes par rubriques suivant <a href=\"#prog\"\>Programmation<\/a\> | <a href=\"#gest\"\>Gestion<\/a\> | <a href=\"#div\"\>Divers<\/a\> que vous trouverez ci-dessous.<BR\>usage : alEd [-pgd] [--h, --heure] [nom_de_fichier]<BR\>\t<U\><BLOCKQUOTE\>Made by <A HREF=\"mailto:aadelmar\@free.fr\"\>Alain Adelmar<\/A\><\/BLOCKQUOTE\><\/U\>\n" . "\tdebuter le [$dt]<BR\>\n\tdernier acc&eacute;s le [" . "$dt]\n";
  $lbl_p = "\n<hr WIDTH=\"100%\"\>\n<A NAME=\"prog\"\><H3\>Programmation :<\/H3\>\n<BR\>\n<BLOCKQUOTE\>\n<A NAME=\"end_puuu\"\><BR\>\n";
  $lbl_g = "<\/BLOCKQUOTE\>\n<hr WIDTH=\"100%\"\>\n<A NAME=\"gest\"\><H3\>Gestion de fichiers :<\/H3\>\n<BR\>\n<BLOCKQUOTE\>\n<A NAME=\"end_guuu\"\><BR\>\n";
  $lbl_d = "<\/BLOCKQUOTE\>\n<hr WIDTH=\"100%\"\>\n<A NAME=\"div\"\><H3\>Divers :<\/H3\>\n<BR\>\n<BLOCKQUOTE\>\n<A NAME=\"end_duuu\"\><BR\>\n";
  $lbl_down = "<\/BLOCKQUOTE\>\n<hr WIDTH=\"100%\"\>\n<A NAME=\"recap\"\><H3\>récapitulatif par date :</H3\>\n<BR\>\n<A NAME=\"sum_date\"\><BR\>\n<hr WIDTH=\"100%\"\>aal<BR\>\n</BODY\>\n<\/HTML\>\n"; 
  open FJ, ">$journal" or die "Ouverture de $journal impossible $!";
  print FJ "$lbl\n$lbl_p\n$lbl_g\n$lbl_d\n$lbl_down\n";
  close FJ || die "Fermeture de $journal impossible $!";
}

sub coupe {
  $dac = "\tdernier accés le \[(..)\]\n";
  foreach $l(@contenu_jrnl) {
    if ($l =~ /$dac/) {
      print "$x you win \n";
      $ld = "\tdernier acc" . '&eacute;s le [' . "$dt\]\n";
#      s/"$l"/"$ld"/;   #ou $l = $ld;
      push @debut, $ld
    }
    if ($deb == 0) {
      if ($l =~ /$mode/) {
	$deb++;
      }
      push @debut, $l;
    }
    else {
      if ($prems == 0) {
	if ($l =~ /$somedate/) {
	  push @interm, $l;
	  $prems++;
	}
	else {
	  push @interm, $l;
	}
      }
      else {
	push @somd, $l;
      }
    }
  }

  open NEW, ">$new" or die "Ouverture de $journal impossible $!";
  print NEW "@debut\n";
  print NEW "$ajout_jrnl\n";
  print NEW "@interm\n";
  print NEW "$recap_date\n";
  print NEW "@somd\n";
  close NEW || die "Fermeture de $journal impossible $!";

}

#-----------vérifier si ~/journal/journal.html existe sinon le créer
sub verifj {
  $dir_journal = "$dir" . "\/jrnl_perso";
  $journal = "$dir$gnup" . "jrnl_perso$gnup" . "journal.html";

  if (!(-e $journal)) {
    &init_journal;
  }

  $old = $journal;
  $new = "$journal.tmp.$$";
  $bak = "$journal.bak";
}

sub watarg {
  print "votre travail ce classera dans:\n[p] pour programmation\n[g] pour gestion de fichier\n[d] pour divers (qui est la mention par defaut)\n";
  chomp ($arg = <STDIN>);
}

# ce merveilleux script vous à été offert par alain Adelmar (celui qui fait du Perl en se curant le nez);
# pour plus de détail jetez un oeil au man aj (pour peu que vous l'ayez installez) trouvable sur http://aadelmar.free.fr/man_aj.html
END;
