/* * make_zetahat * * This program reads the contents of the binary WDSP file "zetaHat.bin" * and prints the data. * * The output is intended to be part of the file "zetaHat.c" which * initializes these arrays (static data) for use with "memcpy" * in emnr.c. * * Should the WDSP file "zetaHat.bin" be changed, "zetaHat.c" must * be re-generated using this program. * * return values of main() * * 0 all OK * -1 sizeof(double) is not 8 * -2 error opening file "zetaHat.bin" * -3 read error */ #include #include #include #include int main() { int fd; int i,j; double d; const size_t dsize = sizeof(double); const size_t isize = sizeof(int); int rows, cols; double gmin, gmax, ximin, ximax; double *zetaDouble; int *zetaInt; if (dsize != 8) { printf("Data type DOUBLE is not 8-byte. Please check!\n"); return -1; } if (isize != 4) { printf("Data type INT is not 4-byte. Please check!\n"); return -1; } fd=open ("zetaHat.bin", O_RDONLY); if (fd < 0) { printf("Could not open file 'zetaHat.bin'\n"); return -2; } if (read(fd, &rows,isize) != isize) { printf("READ ERROR rows\n"); return -3; } printf("int zetaHatDefaultRows = %d;\n", rows); if (read(fd, &cols,isize) != isize) { printf("READ ERROR cols\n"); return -3; } printf("int zetaHatDefaultCols = %d;\n", cols); if (read(fd, &gmin, dsize) != dsize) { printf("READ ERROR gmin\n"); return -3; } printf("double zetaHatDefaultGmin = %30.25f;\n", gmin); if (read(fd, &gmax, dsize) != dsize) { printf("READ ERROR gmax\n"); return -3; } printf("double zetaHatDefaultGmax = %30.25f;\n", gmax); if (read(fd, &ximin, dsize) != dsize) { printf("READ ERROR ximin\n"); return -3; } printf("double zetaHatDefaultXimin = %30.25f;\n", ximin); if (read(fd, &ximax, dsize) != dsize) { printf("READ ERROR ximax\n"); return -3; } printf("double zetaHatDefaultXimax = %30.25f;\n", ximax); zetaDouble = malloc(rows*cols*dsize); if (zetaDouble == NULL) { printf("MALLOC ERROR Double\n"); } zetaInt = malloc(rows*cols*isize); if (zetaInt == NULL) { printf("MALLOC ERROR Int\n"); } if (read(fd, zetaDouble, rows*cols*dsize) != rows*cols*dsize) { printf("READ ERROR in zetaHatDouble\n"); } if (read(fd, zetaInt, rows*cols*isize) != rows*cols*isize) { printf("READ ERROR in zetaHatInt\n"); } // // ZetaDouble data is only valid where ZetaInt is non-negative. // So report a zero where this is the case // for (i=0; i< rows*cols; i++) { if (zetaInt[i] < 0) zetaDouble[i]=0.0; } printf("double zetaHatDefaultData[%d]={\n", rows*cols); for (i=0; i