Test hanning filter implementation. More...
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <libgen.h>
#include <utils.h>
#include <filter.h>
Go to the source code of this file.
Defines | |
#define | _GNU_SOURCE |
GNU extensions. | |
Functions | |
void | show_usage (char *pgm) |
C prototypes. | |
int | main (int argc, char **argv) |
Main program. |
Test hanning filter implementation.
Definition in file testfilter.c.
#define _GNU_SOURCE |
GNU extensions.
Definition at line 59 of file testfilter.c.
int main | ( | int | argc, | |
char ** | argv | |||
) |
Main program.
[in] | argc | Number of command-line arguments. |
[in] | argv | Vector of command-line argument strings. |
Definition at line 98 of file testfilter.c.
References alloc_error(), banner(), FALSE, filter(), show_usage(), and TRUE.
00099 { 00107 int i; 00108 00109 /* Command-line arguments variables */ 00110 char filein[500]; /* Input filename */ 00111 char fileout[500]; /* Output filename */ 00112 FILE *inptr; 00113 FILE *outptr; 00114 00115 int end; 00116 int numval; 00117 int istat; 00118 00119 double *invect; 00120 double *outvect; 00121 double value; 00122 int width = 60; 00123 00124 /* Print BEGIN banner */ 00125 (void) banner(basename(argv[0]), "1.0", "BEGIN"); 00126 00127 /* Get command-line arguments and set appropriate variables */ 00128 if (argc <= 1) { 00129 (void) show_usage(basename(argv[0])); 00130 (void) banner(basename(argv[0]), "ABORT", "END"); 00131 (void) abort(); 00132 } 00133 else 00134 for (i=1; i<argc; i++) { 00135 if ( !strcmp(argv[i], "-i") ) 00136 (void) strcpy(filein, argv[++i]); 00137 else if ( !strcmp(argv[i], "-o") ) 00138 (void) strcpy(fileout, argv[++i]); 00139 else if ( !strcmp(argv[i], "-w") ) 00140 (void) sscanf(argv[++i], "%d", &width); 00141 else { 00142 (void) fprintf(stderr, "%s:: Wrong arg %s.\n\n", basename(argv[0]), argv[i]); 00143 (void) show_usage(basename(argv[0])); 00144 (void) banner(basename(argv[0]), "ABORT", "END"); 00145 (void) abort(); 00146 } 00147 } 00148 00149 inptr = fopen(filein, "r"); 00150 if (inptr == NULL) { 00151 (void) fprintf(stderr, "Cannot open input file : %s.\n", filein); 00152 (void) abort(); 00153 } 00154 outptr = fopen(fileout, "w"); 00155 if (outptr == NULL) { 00156 (void) fprintf(stderr, "Cannot open output file : %s.\n", fileout); 00157 (void) abort(); 00158 } 00159 (void) fprintf(stdout, "Filter width=%d\n", width); 00160 00161 end = FALSE; 00162 numval = 0; 00163 invect = NULL; 00164 while (end == FALSE) { 00165 istat = fscanf(inptr, "%lf", &value); 00166 if ( istat != 1 ) 00167 /* EOF encountered or bad data */ 00168 end = TRUE; 00169 else { 00170 numval++; 00171 invect = (double *) realloc(invect, numval * sizeof(double)); 00172 if (invect == NULL) alloc_error(__FILE__, __LINE__); 00173 invect[numval-1] = value; 00174 } 00175 } 00176 00177 outvect = (double *) calloc(numval, sizeof(double)); 00178 if (outvect == NULL) alloc_error(__FILE__, __LINE__); 00179 00180 filter(outvect, invect, "hanning", width, 1, 1, numval); 00181 00182 for (i=0; i<numval; i++) 00183 (void) fprintf(outptr, "%d %lf %lf\n", i, invect[i], outvect[i]); 00184 00185 (void) fclose(inptr); 00186 (void) fclose(outptr); 00187 00188 (void) free(invect); 00189 (void) free(outvect); 00190 00191 /* Print END banner */ 00192 (void) banner(basename(argv[0]), "OK", "END"); 00193 00194 return 0; 00195 }
void show_usage | ( | char * | pgm | ) |
C prototypes.
Local Subroutines.
Show usage for program command-line arguments.
[in] | pgm | Program name. |
Definition at line 201 of file testfilter.c.