H.1 add.c

/*  
 * add.c -- Suma dos seņales.  
 *  
 * Este fichero fuente puede encontrarse en:  
 * http://www.ace.ual.es/~vruiz/docencia/redes/practicas/add.c  
 *  
 * Compilar escribiendo:  
 * gcc add.c -o add spin.o  
 *  
 * gse. 2006  
 */  
 
#include <stdio.h>  
#include "spin.h"  
 
char **_argv;  
 
FILE* open_file(char *file_name) {  
  FILE *file_descriptor = fopen(file_name,"rb");  
  if(!file_descriptor) {  
    fprintf(stderr,"%s: unable to open %s\n",_argv[0],file_name);  
    exit(1);  
  }  
  return file_descriptor;  
}  
 
main(int argc, char *argv[]) {  
  if(argc<3) {  
    fprintf(stderr,"%s signal_1.float signal_2.float > signal_1+2.float\n",  
    argv[0]);  
  } else {  
    _argv = argv;  
    FILE *s1,*s2;  
    s1 = open_file(argv[1]);  
    s2 = open_file(argv[2]);  
 
    int samples = 0;  
    for(;;) {  
      float sample1, sample2, add;  
      fread(&sample1,1,sizeof(float),s1);  
      if(feof(s1)) break;  
      fread(&sample2,1,sizeof(float),s2);  
      if(feof(s2)) break;  
      add = sample1 + sample2;  
      fwrite(&add,1,sizeof(float),stdout);  
      samples++;  
      spin();  
    }  
    fprintf(stderr,"%s: number of samples = %d\n",argv[0],samples);  
  }  
  return 0;  
}