//      CHALLENGE PAR Ryscrow - http://www.root-me.org/fr/Challenges/Cryptanalyse/Decomposition-pixelisee
// --------------------------------------------------------------------------------------------------------------


#include <stdio.h>
#include <stdlib.h>


void Afficher(char car, unsigned int nb)
{
unsigned int c = 0;
char pixel;

if (car == '0') { pixel = '\x20'; } // Voir une table ASCII - correspond à un espace (pixel noir)
else { pixel = '\xdb'; } // correspond à un rectangle plein (pixel blanc)

while (c != nb)
      {
      printf("%c", pixel);
      c++;
      }

}

//------------------------------------------------

int Analyser()
{
FILE *hFichier = fopen("decomp_pixel.txt", "r");
char car = 0, nb1 = 0, nb2 = 0, curseur;

if (hFichier == NULL)
   {
   printf("\t>Impossible de trouver le fichier\n\n");
   return 0;
   }
printf("\n");

while (fread(&car, 1, sizeof(char), hFichier) != 0)
      {
      if (car == '\n') { fread(&curseur, 1, 1, hFichier); printf("\n");  continue; } // Fin de ligne
      if (car == '+') { continue; }
      fread(&curseur, 1, 1, hFichier); // On déplace le curseur de 1 caractère
      fread(&nb1, 1, sizeof(char), hFichier); // On lit les deux caractères suivant le 'x'
      fread(&nb2, 1, sizeof(char), hFichier); // Le second peut être un chiffre, un '+' ou un saut de ligne
      if (nb2 == '+') { Afficher(car, nb1 - 48); } // On soustrait 48 pour obtenir le chiffre et non le caractère ASCII
      else if (nb2 == '\n') { printf("\n"); fread(&curseur, 1, 1, hFichier); }
      else { Afficher(car, (nb1-48)*10 + (nb2-48)); } // S'il s'agit d'un chiffre
      
      }

printf("\n\n\n\n");
fclose(hFichier);

}


//------------------------------------------------

int main(int argc, char *argv[])
{
  
  Analyser();
  
  system("PAUSE");	
  return 0;
}