#!/usr/bin/perl
# ************************************************************************
#      for Linux and UNIX-Like |   made by alain Adelmar                 *
# remd: petit script pour me rappeler les differents mot de passe.       *
# coord s'appelle directement depuis la console et fourni les coordonnées*
# en clair qui correspondent a un mot ou chiffre issu d'un fichier cripté*
# usage: coord [-euv] [mot ou chiffre]                                   *
#   -e  pour edit, permet d'éditer une entrée                            *
#   -u  pour usage, donne la bonne façon d'ouvrir ce script              *
#   -v  pour version retourne le numéro de version du script             *
#  --------------------------------------------------------------        *
#  Ce script fonctionne bien                                             *
#                                                                        *
#                                                                        *
# alain Adelmar Lundi 19 avril 2010  15:51:15        version: 1.2        *
#*************************************************************************
#$Id: coord,v 1.2 2010/04/19 14:36:08 alain Exp alain $
use strict;
#use warnings;

#--------------
# traitement du temps pour date et heure en français
(my $sec,my $min,my $heure,my $mjour,my $mois,my $annee,my $sjour,my $ajour,my $isdst) =  localtime(time);
my @lssjour = qw( Dim Lun Mar Mer Jeu Ven Sam);
my @lssmois = qw ( Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre );

my $french_date_now = "$lssjour[$sjour] $mjour $lssmois[$mois] " . ($annee+=1900) . " - $heure:$min:$sec";


#--------------------------


use Cwd;
my $dir = getcwd;

my $lx = ("*" x 25) x 2;
our $version = "version: 1.1\n";
my $usage = "usage: $0 [-euv] [mot ou chiffre]\n\t-e  pour edit, permet d'éditer une entrée\n" .
    "\t-u  pour usage, donne la bonne façon d'ouvrir ce script\n\t-v  pour version retourne le numéro de version du script\n$lx\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 ($^O =~ /[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];
#-------------------------------------------------------
# par defaut le fichier sera a /home/login/bin/mescoord.csv
my $file = "$dir$gnup" . "bin$gnup" . "mescoord.csv";

# trouver le fichier contenant les paramètres
my $rootfile = "mescoord.csv";
if (-e "$dir$gnup$rootfile") {
  print "ok: $file\n";
  $file = "$dir$gnup$rootfile";
  }
elsif (-e "$dir$gnup" . "bin$gnup$rootfile") {
   print "ok: $file\n";
  $file = "$dir$gnup" . "bin$gnup$rootfile";
  
  }
else {
  print "Reinstaller votre fichier mescoord.csv dans HOME/login/bin/\n" .
  "ou creer un fichier mescoord.csv (vide) dans HOME/login/bin/\n";
  die "erreur de PATH ou initialisation sans l'option -e\n";
  }

#------------------------------cartouche --------------
my $mode = "change";
my $fr_date_file = &datefile($mode); 
my $moi = " Adelmar alain (aadelmar\@numericable.fr)";
my $head_lbl= "script $0\nécris par $moi\nle $fr_date_file\nexecuter le $french_date_now\n";
my $head_lbl_console = "$lx\nscript:      $0\nécris par:  $moi\nle:          $fr_date_file\nexecuter le: $french_date_now\n$lx\n";

sub datefile { 
  
  ($mode = 8) if ($mode=~ /^a/);
  ($mode = 9) if ($mode=~ /^m/);
  ($mode = 10) if ($mode=~ /^c/);
  my $datenum = ((stat($file))[$mode]);
  (my $sec,my $min,my $heure,my $mjour,my $mois,my $annee,my $sjour,my $ajour,my $isdst) =  (localtime($datenum));
  my $fr_date_file = "$lssjour[$sjour] $mjour $lssmois[$mois] " . ($annee+=1900) . " - $heure:$min:$sec";
  return $fr_date_file;
}
#--------------------------------------------



# initialisation vars
my @contenu = my @newcontenu = my @truc = my @phrase = ();
my $ref = my $respond = "";
my $argv = 0;

# 1er partie avec argument qui ne traite qu'un seul mot sur une ligne.
if($ARGV[0] ne "") {
  if ($ARGV[0] =~ /^-u|usage/) {
    print "\n$head_lbl_console\n$usage\n";
      }
  elsif ($ARGV[0] =~ /^-v|version/) {
    print "\n$head_lbl_console\n$version\n";
      }
  elsif ($ARGV[0] eq "-e") {
    print "\n$head_lbl_console\nmode edition:\n";
    if($ARGV[1] ne "") {
      $ref = $ARGV[2];
      }
    &edit;
  }
  elsif ($ARGV[0] =~ /^\"|\"$/) {
    s/^\"()\"$/$1/;
    $ref = $1;
    $argv = 1;
    &lire_mescoord;
    print "\n$head_lbl_console\nvos paramètres:\n";
    &traiter($ref);
  }
  else {
    $ref = $ARGV[0];
    $argv = 1;
    &lire_mescoord;
    print "\n$head_lbl_console\nvos paramètres:\n";
    &traiter($ref);
  }
}
else {
  print "\n$lx\nVersion longue de coord (sans argument = accés au menu) *\nA noter: Vous auriez pu entrer un mot (label) en    *\nguise d'argument, pensez y la prochaine fois.          *\n                  _  alain Adelmar  _                  *\n$lx\n";
  $argv = 0;
  &menu;
}

sub lire_mescoord {
  
  open(F, "$file") or die "Ouverture de $file impossible $!";
  @contenu = <F>;
  close F || die "fermeture de $file impossible $!";

}

sub traiter {

  foreach (@contenu) {
    (@truc) = split(/,/, $_);
    # print "$truc[0]\n";
    if ($truc[0]=~ /^$ref/) {
      print shift(@truc) . "\n";
      foreach(@truc) {
	print "\t$_\n";
	}
      #print "$_\n";
      }
    }
  }

sub edit {
    my $first = 0;
    print "\n\nVeuillez entrer votre mot(qui restera en clair)\nsuivi des differents parametres et password les uns derriere les autre,\n"
 . "juste separe d'une virgule.\n exp:\nmyspace,toto,T4gZZb12,toto\@lapiequichante.fr\nentrer [quitter] pour sortir\n\n";
  while ($respond !~ /^quit/i) {
    print "donc (votre ligne ou (quitter):\n";
    chomp($respond =<STDIN>);
    (my @phrase) = split(/,/, $respond);
    print "verification, vous avez entrer\n";
    if ($first == 0) {
      print "seul $phrase[0] sera entrer en clair et vous permettra de retrouver les autres parametres ci-dessous\n\n";
      $first++;
      }
    foreach (@phrase) {
      print "$_\t";
      }
    print "\netes vous ok pour ces parametres\n";
    chomp(my $oui = <STDIN>);
    if($oui =~ /^n/i) {
      print "donc pas ok, veuillez recommencer ou [quitter] pour sortir\n";
    }
    else {
      &ecrit || print "ça passe pas $!";;
      }
    }
  }


sub ecrit {
  if ($respond =~ /^quit/i) {
    print "ok man, tes enregistrements sont dans la boite, tchao !\n";
    }
  else {
    open F, ">>$file" or die "impossible d'ouvrir en ecriture $file $!";
    print F "$respond\n";
    $respond = "";
    close F || die "impossible de fermer $file $!";
    }
  }

END;
