#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DELIM "-----------------------------------\n"

enum {WORD_MAX=40};

struct prvek{
	char origin[WORD_MAX], trans[WORD_MAX];
	struct prvek *next;
};

struct prvek *slovnik=0;
FILE *in, *out;
char oddelovac=' ';

/********
Nacte slovnik do spojaku
********/
void nacti_slovnik(char *sFile){
	FILE *soubor=fopen(sFile, "r");
	struct prvek *p;
	char origin[WORD_MAX];

	if (!soubor){
		printf("ERROR: Slovnik nenalezen!!!");
		return;
	};

	fscanf(soubor, "%s", &origin);
	while (!feof(soubor)){
		p=(struct prvek *) malloc(sizeof (struct prvek));
		strcpy(p->origin,origin);
		fscanf(soubor, "%s", &(p->trans));
		p->next=slovnik;
		slovnik=p;
		fscanf(soubor, "%s", &origin);
	};
	fclose(soubor);
};


/********
Vypise slovnik
********/
void vypis_slovnik(){
	struct prvek *p=slovnik;
	printf("------------- SLOVNIK -------------\n");
	while (p) {
		printf("%s->%s\n", p->origin, p->trans);
		p=p->next;
	}
	printf(DELIM);
};


/********
Hleda slovo ve slovniku, a pokud ho tam najde, tak ho prelozi
********/
void Preloz(char *origin){
	struct prvek *p=slovnik;
	while (p && strcmp(p->origin,origin)) p=p->next;	//najdi slovo

	if (p) strcpy(origin,p->trans);
};


/********
Nacita slova a dava je slovniku k prekadu
********/
void Prekladej(){
	char slovo[WORD_MAX]="";
	int aktualni_pozice=-1;

	while (!feof(in)){	//cti, dokud jsou na vstupu slova
		/*
		Nacti slovo do bufferu
		*/
		while
			((aktualni_pozice==-1) ||
			((slovo[aktualni_pozice]!= ' ') &&		//dokud to neni bily znak
			 (slovo[aktualni_pozice]!='\n') &&
			 (slovo[aktualni_pozice]!='\t') &&
			 (!feof(in))
			)) slovo[++aktualni_pozice]=fgetc(in);	//cti dal

		if (!feof(in)) oddelovac=slovo[aktualni_pozice];
		else oddelovac=0;
		slovo[aktualni_pozice]=0;

		/*
		prelozi slovo, pokud se ma prekladat, jinak ho necha
		*/
		Preloz(slovo);

		/*
		a vytiskne ho
		*/
		fprintf(out,"%s",slovo);
		if (oddelovac) fprintf(out, "%c", oddelovac);
		aktualni_pozice=-1;
	};

};

/********
Nacte parametry a preda otevrene soubory ke zpracovani
********/
int main(int argc, char **argv){
	if (argc<2){
		printf("ERROR: Spatny pocet parametru!!!\nPovinne jsou inputfile slovnik a napoviny outputfile.");
		return 1;
	};
	in=fopen(argv[1],"r");
	nacti_slovnik(argv[2]);
	vypis_slovnik();			//jen pro ladeni
	if (argc>3)
		out=fopen(argv[3],"w");
	else
		out=stdout;

	Prekladej();

	fclose(in);
	if (out!=stdout) fclose(out);
	printf("\n%s",DELIM);
	system("PAUSE");
	return 0;
};
