/* detasse.c */

#define _GNU_SOURCE
#include <stdio.h>
#include <ctype.h>
#include "detasse.h"
#include "code.h"

FILE *source, *dest;
int para;

void detassecar (char lettre, int rang)
{
  char n;

  if (islower(lettre))
    {
      n = (lettre - 'a') * para + 'a' + rang ;
      if (isalpha(n))
	fputc (n, dest);
      else /* on est hors de l'alphabet */
	fputc ('_', dest);
    }
  else if (isupper(lettre))
    {
      n = (lettre - 'A') * para + 'A' + rang ;
      if (isalpha(n))
	fputc (n, dest);
      else
	fputc ('_', dest);
    }
  else /* ponctuation, chiffre, séparateur ... */
    {
      fputc (lettre, dest); 
    }
}

void detassefich (void)
{
  char *ligne = NULL;
  int longligne; /* longueur du tab ligne */
  size_t n = 0; 

  longligne = getline (&ligne, &n, source);
  while (longligne != -1)
    {
      /* si ligne vide, on saute 1 ligne et non (para) lignes*/
      if (longligne == 1)
	{
	  fputc('\n', dest);
	}
      else
	{
	  for (int rang = 0 ; rang < para ; rang++)
	    {  
	      for (int i = 0 ; i < longligne ; i++)
		{
		  detassecar (ligne[i], rang);
		}
	    }
	}
      longligne = getline (&ligne, &n, source);   
    }
}

int main(int argc, char *argv[])
{
  gestion_parametres (argc, argv);
  detassefich();
  fclose (source);
  fclose (dest);
  return 0;
}

