#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>


#define MAX_PRIMER 5000
int main(int argc, char *argv[])
{

	if (argc < 3) {
		printf ("Usage Error: ./streamize IN OUT");
		return 1;
	}
	int n_read=1;
	int infile;
	int outfile;
	int point=-1;
	int primers[MAX_PRIMER];
	
	char buffer[10];
	int number;
	int div_n;
	int actual=2;
	int primer=1;
	
	primers[0]=0;
	primers[1]=0;
	primers[2]=1;
	for (number=3;number<MAX_PRIMER;number++) {
		for (div_n=2;div_n<(number/2)+1;div_n++) {
			if (number%div_n == 0 && div_n!=number) {
				primers[number]=0;
				primer=0;
			}
		}
		if (primer==1) {
			primers[number]=actual;
			//printf ("primer %d -- > %d\n",number,primers[number]);
			actual++;
		}
		primer=1;
	}
	
	infile=open(argv[1],O_RDONLY);
	outfile=open(argv[2],O_CREAT|O_WRONLY|O_TRUNC,00666);
	while (n_read==1){
		do {
			point++;
			n_read=read(infile,&buffer[point],1);
		}while (buffer[point]!=0x0A&&point<10) ;
	
		if (n_read==1) {
			buffer[point]=0;
			//printf ("%d\n",atoi(buffer));	
			number=atoi(buffer);
			if (number < MAX_PRIMER && primers[number]!=0) {
				number=primers[number]; //Passo el número primer a ordinal
				number=(number&0xFF); // El redueixo a 1 byte
				write (outfile,&number,1);
			}
			else{
				printf ("ERRROR %d\n",number);
			}
				
//			El numero maxim es 5000 2 bytes
//
//			PASSAR ELS NUMEROS PRIMERS A ORDINALS 2-->1,3-->2,5-->3,...
//			number=(number%0xFF);
//			write (outfile,&number,1);
			//write (outfile,&number,1);
			for (point=0;point<10;point++) buffer[point]=0;
			point=-1;
		}
	}
	
	return 0;
}
