1 /* Copyright (c) 1979 Regents of the University of California */ 2 3 static char sccsid[] = "@(#)READ8.c 1.5 04/09/82"; 4 5 #include "h00vars.h" 6 #include <errno.h> 7 extern int errno; 8 9 double 10 READ8(curfile) 11 12 register struct iorec *curfile; 13 { 14 double data; 15 int retval; 16 17 if (curfile->funit & FWRITE) { 18 ERROR("%s: Attempt to read, but open for writing\n", 19 curfile->pfname); 20 return; 21 } 22 UNSYNC(curfile); 23 errno = 0; 24 retval = fscanf(curfile->fbuf, "%lf", &data); 25 if (retval == EOF) { 26 ERROR("%s: Tried to read past end of file\n", curfile->pfname); 27 return; 28 } 29 if (retval == 0) { 30 ERROR("%s: Bad data found on real read\n", curfile->pfname); 31 return; 32 } 33 if (errno == ERANGE) { 34 if (data == 0.0) 35 ERROR("%s: Underflow on real read\n", curfile->pfname); 36 else 37 ERROR("%s: Overflow on real read\n", curfile->pfname); 38 return; 39 } 40 if (errno != 0) { 41 PERROR(curfile->pfname); 42 return; 43 } 44 curfile->funit &= ~EOLN; 45 curfile->funit |= SYNC; 46 return data; 47 } 48