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

#define NOMEFILE_DATI "dati.bin"
#define NOMEFILE_RIV1 "riv1.txt"
#define NOMEFILE_RIV2 "riv2.txt"

typedef int*   pint;
typedef float* pfloat;
typedef FILE*  pfile;

int main(void)
 {pfile fd,fr1,fr2;
  int   n_dati,n1=0,n2=0,i,riv;
  float val;
  pfloat a1,a2;

  if ((fd=fopen(NOMEFILE_DATI,"rb"))==NULL)
   {printf("Non ho potuto aprire il file %s in lettura",NOMEFILE_DATI);
    return EXIT_FAILURE;
   }

  if ((fr1=fopen(NOMEFILE_RIV1,"w"))==NULL)
   {printf("Non ho potuto aprire il file %s in scrittura",NOMEFILE_RIV1);
    return EXIT_FAILURE;
   }

  if ((fr2=fopen(NOMEFILE_RIV2,"w"))==NULL)
   {printf("Non ho potuto aprire il file %s in scrittura",NOMEFILE_RIV2);
    return EXIT_FAILURE;
   }

  if (!fread(&n_dati,sizeof(int),1,fd))  goto file_corto;
  for(i=0;i<n_dati;i++)
   {if (!fread(&riv,sizeof(int),1,fd))   goto file_corto;
    if(riv==1) n1++; else n2++;
    if (!fread(&val,sizeof(float),1,fd)) goto file_corto;
   }
  fclose(fd);
 
  if ((a1=(pfloat)malloc(sizeof(float)*n1))==NULL) goto memoria_insufficiente;
  if ((a2=(pfloat)malloc(sizeof(float)*n2))==NULL) goto memoria_insufficiente;    
  if ((fd=fopen(NOMEFILE_DATI,"rb"))==NULL)
   {printf("Non ho potuto aprire il file %s in lettura",NOMEFILE_DATI);
    return EXIT_FAILURE;
   }

  fread(&n_dati,sizeof(int),1,fd);

  for(n1=n2=i=0;i<n_dati;i++)
   {if (!fread(&riv,sizeof(int),1,fd)) goto file_corto;
    if (!fread(&val,sizeof(float),1,fd)) goto file_corto;
    if(riv==1) 
     {a1[n1++]=val;
      fprintf(fr1,"%f",val);
      if (!(n1%2)) fprintf(fr1,"\n");
      else fprintf(fr1," ");
     }
    else 
     {a2[n2++]=val;
      fprintf(fr2,"%f ",val);
      if (!(n2%2)) fprintf(fr2,"\n");
      else fprintf(fr2," ");
     }
   }
  fclose(fd); 
  fclose(fr1); 
  fclose(fr2);

  /*Messi solo per debug .....*/
  printf("Dati del rivelatore numero 1:\n");
  for(i=0;i<n1;i++) printf("dato num. %d --> %f\n",i+1,a1[i]);

  /*Messi solo per debug .....*/
  printf("Dati del rivelatore numero 2:\n");
  for(i=0;i<n2;i++) printf("dato num. %d --> %f\n",i+1,a2[i]);

  return EXIT_SUCCESS;
  
  memoria_insufficiente:
   printf("Memoria insufficiente!!\n");
   return EXIT_FAILURE;

  file_corto:
   printf("File troppo corto!!\n");
   return EXIT_FAILURE; 
 }
