/*
   this file reads input.fna and 
   1)finds is size using stat
   2)convets the .fna file to a single line file
   3)output file name will be single_line***** where ***** is input file name
   4)user fread and fwrite to read and write files
 */
#include<cstdio>
#include<cstdlib>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<cstring>
char input_file[100],outfile[100];
int input_file_size;
void getfileinfo(void)
{

	struct stat s1;
	char *older;
//stat is the defined structure in c that is used to extract information about files	
	if (stat(input_file, &s1) < 0) 
	{
		fprintf(stderr, "cannot stat %s\n",input_file);
		exit(1);
	}
	printf("last access time of the input file is (s1.st_mtime) = %u\n", s1.st_mtime);
	input_file_size=s1.st_size;
	printf("the size of input file  is %d kb\n",input_file_size);
}

void readfile(void)
{
	FILE *fna_ptr;
	FILE *single_line_ptr;
	char *current_area,*current_write_content;
	int no_of_4kbs,i1,i2,i3,i4,remaining_length,current_area_counter=0,current_write_content_counter=0;
	current_area=new char [4096];
	current_write_content=new char [4096];
	fna_ptr=fopen(input_file,"r");
	if(fna_ptr==NULL)
	{
		printf("cannot open file \n");
		exit(1);
	}
	single_line_ptr=fopen(outfile,"w");
	if(single_line_ptr==NULL)
	{
		printf("cannot open file %s for writting\n",outfile);
		exit(1);
	}
	no_of_4kbs=input_file_size/4096;
	remaining_length=input_file_size%4096;
	printf("the size of file in 4kbs is  %d kb\n,remaing length=%d\n",no_of_4kbs,remaining_length);
	for(i1=0;i1<=no_of_4kbs;i1++)
	{
		current_area_counter=0;
		current_write_content_counter=0;
		memset(current_area,'X',4096);
	//	printf("i1=%d\n",i1);
		fread(current_area,4,1024,fna_ptr);
		for(;current_area_counter<4096;current_area_counter++)
		{
		//	printf("'%c'\n",current_area[current_area_counter]);
			if((current_area[current_area_counter]!='\n')&&(current_area[current_area_counter]!='X'))
			{
				current_write_content[current_write_content_counter]=current_area[current_area_counter];
				current_write_content_counter++;
			}
			else
			{
			//	printf("one newline spotted\n");
			//	printf("current_write_content_counter=%d\t current_area_counter=%d\n",current_write_content_counter,current_area_counter);
			}
		}
		//printf("current_write_content_counter=%d\t current_area_counter=%d\n",current_write_content_counter,current_area_counter);
		//printf("current_write_content_counter=%d\n",current_write_content_counter);
		fwrite(current_write_content,1,current_write_content_counter,single_line_ptr);
		
		
	}
	delete current_area;
	delete current_write_content;
	fclose(single_line_ptr);
	fclose(fna_ptr);
}

int main(void)
{
	printf("enter the input file name\n");
	gets(input_file);
	strcat(outfile,"single_line");
	strcat(outfile,input_file);
	printf("entered value is %s\n",input_file);
	printf("the output file is %s\n",outfile);
	getfileinfo();
	readfile();
	return 0;
}
	
	
		

