220void
readC(
double *bufferDouble,
float *bufferFloat,
int *bufferInt,
221 int *lengthBuffers,
int *nFileIn,
int *errorFlag) {
233 int fileIndex = *nFileIn - 1;
236 if (!bufferFloat || !bufferInt || !lengthBuffers) {
242 int recordLength = 0;
244 int nCheckR = gzread(
files[fileIndex], &recordLength,
sizeof(recordLength));
245 if (gzeof(
files[fileIndex])) {
250 if (recordLength<0) {
252 recordLength = -recordLength;
254 if (
sizeof(recordLength) != nCheckR) {
255 printf(
"readC: problem reading length of record file %d\n", fileIndex);
260 if (recordLength/2 > *lengthBuffers) {
266 for (; i< recordLength/2; ++i)
268 int nCheckD = gzread(
files[fileIndex], bufferDouble,
sizeof(bufferDouble[0]));
269 if (nCheckD !=
sizeof(bufferDouble[0])) {
270 printf(
"readC: problem with stream or EOF skipping doubles\n");
276 for (; i< recordLength/2; ++i)
278 int nCheckF = gzread(
files[fileIndex], bufferFloat,
sizeof(bufferFloat[0]));
279 if (nCheckF !=
sizeof(bufferFloat[0])) {
280 printf(
"readC: problem with stream or EOF skipping floats\n");
288 for (; i< recordLength/2; ++i)
290 int nCheckI = gzread(
files[fileIndex], bufferInt,
sizeof(bufferInt[0]));
291 if (nCheckI !=
sizeof(bufferInt[0])) {
292 printf(
"readC: problem with stream or EOF skipping ints\n");
299 *lengthBuffers = recordLength/2;
302 *lengthBuffers = recordLength/2;
307 int nCheckD = gzread(
files[fileIndex], bufferDouble, *lengthBuffers*8);
308 if (nCheckD != *lengthBuffers*8) {
309 printf(
"readC: problem with stream or EOF reading doubles\n");
314 int nCheckF = gzread(
files[fileIndex], bufferFloat, *lengthBuffers*4);
315 if (nCheckF != *lengthBuffers*4) {
316 printf(
"readC: problem with stream or EOF reading floats\n");
321 for (; i< recordLength/2; ++i) bufferDouble[i] = (
double) bufferFloat[i];
325 int nCheckI = gzread(
files[fileIndex], bufferInt, *lengthBuffers*4);
326 if (nCheckI != *lengthBuffers*4) {
327 printf(
"readC: problem with stream or EOF reading ints\n");
332 size_t nCheckR = fread(&recordLength,
sizeof(recordLength), 1,
334 if (feof(
files[fileIndex])) {
342 if (1 != nCheckR || ferror(
files[fileIndex])) {
343 printf(
"readC: problem reading length of record, file %d\n", fileIndex);
348 if (recordLength < 0) {
350 recordLength = -recordLength;
352 if (recordLength / 2 > *lengthBuffers) {
358 for (; i < recordLength / 2; ++i) {
359 size_t nCheckD = fread(bufferDouble,
sizeof(bufferDouble[0]), 1,
361 if (ferror(
files[fileIndex]) || feof(
files[fileIndex])
362 || nCheckD != *lengthBuffers) {
364 "readC: problem with stream or EOF skipping doubles\n");
370 for (; i < recordLength / 2; ++i) {
371 size_t nCheckF = fread(bufferFloat,
sizeof(bufferFloat[0]), 1,
373 if (ferror(
files[fileIndex]) || feof(
files[fileIndex])
374 || nCheckF != *lengthBuffers) {
376 "readC: problem with stream or EOF skipping floats\n");
384 for (; i < recordLength / 2; ++i) {
385 size_t nCheckI = fread(bufferInt,
sizeof(bufferInt[0]), 1,
387 if (ferror(
files[fileIndex]) || feof(
files[fileIndex])
388 || nCheckI != *lengthBuffers) {
389 printf(
"readC: problem with stream or EOF skiping ints\n");
396 *lengthBuffers = recordLength / 2;
399 *lengthBuffers = recordLength / 2;
404 size_t nCheckD = fread(bufferDouble,
sizeof(bufferDouble[0]),
405 *lengthBuffers,
files[fileIndex]);
406 if (ferror(
files[fileIndex]) || feof(
files[fileIndex])
407 || nCheckD != *lengthBuffers) {
408 printf(
"readC: problem with stream or EOF reading doubles\n");
413 size_t nCheckF = fread(bufferFloat,
sizeof(bufferFloat[0]),
414 *lengthBuffers,
files[fileIndex]);
415 if (ferror(
files[fileIndex]) || feof(
files[fileIndex])
416 || nCheckF != *lengthBuffers) {
417 printf(
"readC: problem with stream or EOF reading floats\n");
422 for (; i < recordLength / 2; ++i)
423 bufferDouble[i] = (
double) bufferFloat[i];
426 size_t nCheckI = fread(bufferInt,
sizeof(bufferInt[0]), *lengthBuffers,
428 if (ferror(
files[fileIndex]) || feof(
files[fileIndex])
429 || nCheckI != *lengthBuffers) {
430 printf(
"readC: problem with stream or EOF reading ints\n");
436 *errorFlag = 4 * (doublePrec + 1);