home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 519b.lha / Casio_FZ-1 / hilo.c < prev    next >
C/C++ Source or Header  |  1991-06-09  |  2KB  |  81 lines

  1. /* hilo - print highest and lowest sample values */
  2.  
  3. #include <stdio.h>
  4.  
  5. short buffer[512];
  6.  
  7. main(argc,argv)
  8. int argc;
  9. char *argv[];
  10. {
  11.     FILE *fopen(), *fp;
  12.     short sample, i, average;
  13.     short blockhisample, blocklosample;
  14.     short grandhisample = -32768, grandlosample = 32767;
  15.     long grandtotal = 0, nsamples = 0;
  16.     long blocktotal;
  17.     unsigned long blockvariance, grandvariance = 0;
  18.     unsigned long sample_squared;
  19.  
  20.     if (argc != 2)
  21.     {
  22.         fprintf(stderr,"usage: hilo casiodumpfilename\n");
  23.         printf("argc %d\n",argc);
  24.         exit(1);
  25.     }
  26.  
  27.     if ((fp = fopen(argv[1],"r")) == NULL)
  28.     {
  29.         perror(argv[1]);
  30.         exit(2);
  31.     }
  32.  
  33.     if (fseek(fp,1024L,1) == -1)
  34.     {
  35.         perror(argv[1]);
  36.         exit(3);
  37.     }
  38.  
  39.     while (fread(buffer,1024,1,fp) != 0)
  40.     {
  41.         nsamples += 512;
  42.  
  43.         blockhisample = -32768;
  44.         blocklosample = 32767;
  45.         blocktotal = 0;
  46.         blockvariance = 0;
  47.  
  48.         for (i = 0; i < 512; i++)
  49.         {
  50.             sample = buffer[i];
  51.             /* printf("%4x ",(sample >> 4) & 0xf); */
  52.  
  53.             /* compute block values */
  54.             blocktotal += sample;
  55.             if (sample < blocklosample)
  56.                 blocklosample = sample;
  57.             if (sample > blockhisample)
  58.                 blockhisample = sample;
  59.  
  60.             /* compute grand values */
  61.             grandtotal += sample;
  62.             if (sample < grandlosample)
  63.                 grandlosample = sample;
  64.             if (sample > grandhisample)
  65.                 grandhisample = sample;
  66.  
  67.             /* compute variance */
  68.             sample_squared = ((sample / 32) * (sample / 32));
  69.             blockvariance += sample_squared;
  70.             grandvariance += sample_squared;
  71.         }
  72.         average = blocktotal/512;
  73.  
  74.             printf("512 samples: avg %d, hi %d, lo %d, variance %ld\n",average,blockhisample,blocklosample,blockvariance * 2);
  75.     }
  76.     average = grandtotal/nsamples;
  77.  
  78.     printf("totals: nsamples %ld, avg %d, hi %d, lo %d, variance %ld\n",nsamples,average,grandhisample,grandlosample,grandvariance * 2);
  79.     exit(0);
  80. }
  81.