//I.157.
//Véges Márton, 10.oszt
//Budapest, Fazekas Mihály Gimnázium
//vegesm@t-online.hu
//Microsoft Visual C++ alatt tesztelve
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

char buff[100];


//A kódolás: két egymás utáni szám összegének a fele adja a titkosított betűt
void main(int argc,char *argv[])
{
	FILE *write,*read;
	int i,j,m;
	char c;
	if(argc!=4)
	{
		printf("Rossz parameterlista\n");
		return;
	}
	read=fopen(argv[2],"r");			//fájlok megnyitása beolvasásához és íráshoz
	write=fopen(argv[3],"w");
	srand((unsigned)time( NULL ));
	if(!strcmp(argv[1],"be"))			//titkosítani kell
	{
		i=getc(read);					//titkosítandó karakter beolvasása
		while(!feof(read))
		{
			c=i;
			i*=2;
			j=rand()%i;					//két szám meghatározása
			m=i-j;
			itoa(j,buff,10);			//első számból string
			fprintf(write,"%s; ",buff);	//első szám kiírása
			itoa(m,buff,10);			//második számból string
			fprintf(write,"%s; ",buff);	//második szám kiírása
			i=getc(read);				//titkosítandó karakter beolvasása
		}
	}
	else								//dekódolni kell
	{
		c=getc(read);					//egy karakter beolvasása
		i=0;
		m=0;							//m-ha 0, akkor páratlan sokadik számot, ha 1, akkor páros sokadikat olvassuk be
		while(!feof(read))
		{
			if(c==';')					//egy szám végéhez ért
			{
				if(m)					//második számot olvasta be
				{
					i+=j;
					i=i/2;				//dekódolja a betűt
					c=(char)i;
					fputc(i,write);
					i=0;
				}
				else					//első szám
				{
					j=i;				//j-be kerül az előző szám, i-be a 0
					i=0;
				}
				m=!m;
			}
			else if(c>='0' && c<='9')	//még nem a szám vége
			{
				i=10*i+c-'0';			//i-hez hozzáírja a beolvasott karaktert
			}
			c=getc(read);				//következő karakter
		}
	}
	fclose(read);
	fclose(write);
}