#include <stdio.h>
#include <stdlib.h>
#include <float.h>

#define FILE_IN1 "d1.bin"
#define FILE_IN2 "d2.bin"
#define FILE_OUT "res.bin"
#define SOGLIA   1.5

typedef struct _evento {float t,v;} evento;
typedef evento* pevento;
typedef FILE*   pfile;

int main(void)
 {pfile    pfi1,pfi2,pfo;
  evento   e1,e2;
  float    sum_before=(FLT_MAX/SOGLIA),sum_after,tmp;
  
  if ((pfi1=fopen(FILE_IN1,"rb"))==NULL) goto file_err;
  if ((pfi2=fopen(FILE_IN2,"rb"))==NULL) goto file_err;
  if ((pfo =fopen(FILE_OUT,"wb"))==NULL) goto file_err;

  for(;;)
   {if (fread(&e1,sizeof(evento),1,pfi1)!=1) goto file_err;
    if (fread(&e2,sizeof(evento),1,pfi2)!=1) goto file_err;
    if ((!(e1.t))&&(!(e2.t))) break;
    printf("Letti: (t=%.2f,v=%.2f) e (t=%.2f,v=%.2f)",e1.t,e1.v,e2.t,e2.v); 
    if (e1.t>e2.t) {tmp=e1.v;e1.v=e2.v;e2.v=tmp;tmp=e1.t;e1.t=e2.t;e2.t=tmp; printf(" - Fuori ordine!!! ");};
    if ((sum_after=(e1.v+e2.v))<(SOGLIA*sum_before))
     {sum_before=sum_after;
      if (fwrite(&e1,sizeof(evento),1,pfo)!=1) goto file_err;
      if (fwrite(&e2,sizeof(evento),1,pfo)!=1) goto file_err;
      printf(" - Salvati su file\n");
     }
    else printf(" - Scartati\n");
   }
  
  e1.t=0.0;
  if (fwrite(&e1,sizeof(evento),1,pfo)!=1) goto file_err;
  fclose(pfi1); fclose(pfi2); fclose(pfo);
  return EXIT_SUCCESS;

  file_err: printf("File Error!\n");  return EXIT_FAILURE;
 }



