/*Spike  noise, Salt and Pepper  */

#include <stdio.h>
#include <math.h>
#define MAX
#include "lib.h"
double drand32();


int main (int argc, char *argv[])
{
  //spike definições  aqui
int x, nivbruit1, nivbruit2, densite ;
int pixel, pixbruit, bruit, bruit1, bruit2 ;




	int i=0, j=0, k=0, kk=0;

	int image[1024][1024];
	FILE *f;
	IMAGE im=0;

	if (argc < 5)
	{
	  printf ("Entre com: nivel_ min <nivbruit1> nivel_max <nivbruit2> densidade <densite> \n");
	  exit (1);
	}

	im = Input_PBM (argv[1]);
	if (im == 0)
	{
	  printf ("No input image ('%s')\n", argv[1]);
	  exit (2);
	}
//entrando com spike aqui

      nivbruit1 =  atoi( argv[2]);
      nivbruit2 =  atoi( argv[3]);
      densite  =  atoi( argv[4]);

printf("vc entrou com  %d, %d e %d\n",nivbruit1,nivbruit2, densite);
	k = 0;
	f = fopen ("spike_res.pgm", "w");
	fprintf (f, "P2\n%d %d 255\n", im->info->nc, im->info->nr);
	for (i=0;  i < im->info->nr; i++)
	  for (j=0; j < im->info->nc; j++)
	  {
	    pixel = random(densite)/1000000 +1 ;

	    if(pixel <= densite)
           {
 	     bruit1 = random(nivbruit1);
	     bruit2 = random(nivbruit2) ;
	     bruit = (random(bruit1) - random(bruit2))/10000000 ;
	     pixbruit = im->data [i][j] + bruit ;
             if(pixbruit > 255) pixbruit = 255 ;
             if(pixbruit < 0)   pixbruit = 0 ;
             image[i][j] = pixbruit ;

	       //	    printf ("xxxx  ----->>> %f , %f , %f\n",bruit1, bruit2, densite);
	   }
	    else
	      {
                image[i][j] = im->data [i][j];

	      }

	    //           if(pixbruit > 255) pixbruit = 255 ;
	    //           if(pixbruit < 0)   pixbruit = 0 ;

	    //           image[i][j] = pixbruit ;

	    //	    printf ("xxxx  ----->>> %d , %d\n", i, j);
	    fprintf (f, "%3d ", image[i][j]);
	    k++;
	    if (k > 15) 
	    {
	      k = 0;
	      fprintf (f, "\n");
	    }
	  }
	fprintf (f, "\n");
	fclose (f);

}