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

typedef struct {
	char valeurs[1000];
	int debut;
	int fin;
	size_t taille;
} file;

void initialise_file(file* f) {
	f->debut = 0;
	f->fin = 0;
	f->taille = 0;
}

int empty(file* f) {
	return (f->taille == 0);
}

void enqueue(file* f, char c) {
	f->valeurs[f->fin] = c; 
	f->fin++;
	f->taille++;
}

char dequeue(file* f) {
	if (empty(f)) {
		printf("Erreur : La file est vide.\n");
		return;
	}
	f->debut++;
	f->taille--;
	return f->valeurs[f->debut-1];
}

int main(int argc, char** argv) {
	FILE* fichier = NULL;
	file f;
	char resultat;
	initialise_file(&f);
	if (argc != 2) {
		printf("Il faut entrer un (unique) chemin de fichier.\n");
		return EXIT_FAILURE;
	}
	fichier = fopen(argv[1], "r");
	if (fichier == NULL) {
		printf("Erreur d'ouverture.\n");
		return EXIT_FAILURE;
	}
	fread(&resultat, 1, 1, fichier);
	if (resultat == ';') { /* Point d'interrogation grec */ 
		enqueue(&f, ';'); /* Point virgule */
	}
	else {
		enqueue(&f, resultat);
	}
	while (feof(fichier) != 0) {
		fread(&resultat, 1, 1, fichier);
		if (resultat == ';') { /* Point d'interrogation grec */ 
			enqueue(&f, ';'); /* Point virgule */
		}
		else {
			enqueue(&f, resultat);
	}
	fclose(fichier);

	fichier = fopen(fichier, "w+");
	while (feof(fichier) != 0) {
		resultat = dequeue(&f);
		fwrite(&resultat, 1, 1, fichier);
	}
	fclose(fichier);


	return EXIT_SUCCESS;
}