#include <stdio.h>
#include <string.h>

int main(int argc,char* argv[])
{
	FILE* f,*o;
	char fname[100];
	int fnum=0;
	int i,j,flag,count;
	i=0;

	int in[4];
	int pos;

	f = fopen(argv[1],"r");

	pos=0;
	while(!feof(f))
	{
	  for(pos=0;pos<4;pos++)
	    in[pos] = fgetc(f);
	  
	  for(i=0;i<4;i++)
	    if(in[i]==0xFF)
	      break;
	  
	  if(in[i]==0xFF)
	    {
	      //in[0]=0xFF;
	      for(pos=i,i=0;pos<4;pos++)
		in[i++]=in[pos];
	      for(;i<4;i++)
		in[i]=fgetc(f);
	      //printf("0xFF");
	    

	      if(in[1]==0xD8)
		{//printf("0xD8");
		if(in[2]==0xFF)
		  {//printf("0xFF");
		  if(in[3]==0xE1 || in[3]==0xE0)
		    {
		      printf("JPEG Header\n");
		      snprintf(fname,100,"recovered_%04d.jpg",fnum++);
		      o = fopen(fname,"w");
		      for(i=0;i<4;i++)
			fputc(in[i],o);
		      flag=0;
		      count=0;
		      while(!feof(f))
			{
			  if(!flag)
			    in[0] = fgetc(f);
			  else
			    flag=0;

			  in[1] = fgetc(f);
			  if(in[0]==0xFF && in[1]==0xD9)
			    count++;
			  if(count==2)
			    break;
			  if(in[1]==0xFF)
			    {
			      flag=1;
			      fputc(in[0],o);
			      in[0]=in[1];
			    }
			  else
			    {
			      fputc(in[0],o);
			      fputc(in[1],o);
			    }
			};
		      fputc(in[0],o);
		      fputc(in[1],o);
		      printf("End of jpeg\n");
		      close(o);
		      fname[0]++;
		    }}}
	    }
	}
	return 0;
}
