/*
	Name: Cryptage
	Copyright: Teos-Galaxies
	Author: Teos
	Date: 01/11/06 03:28
	Description: Programme de Cryptage
*/

//_____Includes________________________________________________________________
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//-----------------------------------------------------------------------------



//_____Prototypes______________________________________________________________
void Cryptage (char *Chemin, char Clef[]);
void Code (char Clef[]);
void Extension (char *Chemin2, char *Chemin);
void Copie (const char *source, const char *dest);
//-----------------------------------------------------------------------------


//_____Fonction Main___________________________________________________________
///////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
	//On cree les variables:
	int i = 0;
	char Clef[30] = {0}, Chemin[1000] = {0};

	if (argc > 1 && argc <= 100) {
		//On demande la Cle de Cryptage:
		printf ("\n>> Cle de Cryptage : ");
		Code(Clef);

		//On ouvre tout les Fichier entrees en parametres:
		for(i = 1; argv[i] != NULL; i++) {
			Cryptage(argv[i], Clef);
			printf ("\n\n>> Termine : %d/%d\n\n", i, argc-1);
		}
	}
	else if (argc > 100) {
		printf ("\n\nErreur : Trop de fichier a crypter.\n");
		system("PAUSE");
	}
	else {
		//On demande le chamin d'acces du fichier a traiter...
		printf (">> Fichier : ");
		scanf	("%s", Chemin);

		//On demande la Cle de Cryptage:
		printf ("\n>> Cle de Cryptage : ");
		Code(Clef);

		Cryptage(Chemin, Clef);
		printf ("\n\n>> Termine : 1/1\n\n");
	}

	//system("PAUSE");
	return 0;
}
//_____________________________________________________________________________
///////////////////////////////////////////////////////////////////////////////



//_____Fonction Cryptage_______________________________________________________
void Cryptage (char *Chemin, char Clef[])
{
	//On cree les variables:
	char Caractere = 0;
	char Chemin2[1100] = {0};
	int Resultat = 0, Impr = 0;
	int i = 0, n = 0;
	FILE* Fichier = NULL;
	FILE* Temp = NULL;

	Fichier =	fopen (Chemin, "rb");
	Temp = fopen("Temp.tmp", "wb");

	while(fread(&Caractere, sizeof(char), 1, Fichier)) {
		if(Clef[i] == '\0') {
			i = 0;
		}
		Resultat = Caractere ^ Clef[i];
		if (n >= 59) {
			Impr = Resultat % 2;
			if (Impr < 0)
				Impr += 2;
			printf ("%d", Impr);
			n = 0;
		}
		n++;
		fwrite(&Resultat, sizeof(char), 1, Temp);
		i++;
	}

	fclose(Fichier);
	fclose(Temp);

	remove (Chemin);
	Extension (Chemin2, Chemin);
	Copie ("Temp.tmp", Chemin2);
	remove ("Temp.tmp");
}
//-----------------------------------------------------------------------------



//_____Fonction Copie__________________________________________________________
void Copie (const char *source, const char *dest)
{
	//On cree les variables:
	char Caractere;
	FILE* Fichier = NULL;
	FILE* Temp = NULL;

	Temp = fopen (source, "rb");
	Fichier = fopen (dest, "wb");
	while(fread(&Caractere, sizeof(char), 1, Temp))
		fwrite(&Caractere, sizeof(char), 1, Fichier);
	fclose(Fichier);
	fclose(Temp);
}
//-----------------------------------------------------------------------------



//_____Fonction Code___________________________________________________________
void Code (char Clef[])
{
	int i = 0;
	char c = 0;
	c = getc(stdin);
	
	while (c != '\n' && i<29) {
		Clef[i] = c;
		c = getc(stdin);
		putc ('*', stdout);
		i++;
	}
	Clef[i] = '\0';
	printf ("\n\n");
}
//-----------------------------------------------------------------------------



//_____Fonction Extension______________________________________________________
void Extension (char *Chemin2, char *Chemin)
{
	strcpy (Chemin2, Chemin);
	char *Extension;
	if (strstr(Chemin2, ".crypteos")) {
		Extension = strstr(Chemin2, ".crypteos");
		*Extension = '\0';
	}
	else {
		strcat (Chemin2, ".crypteos");
	}
}
//-----------------------------------------------------------------------------



