xref: /csrg-svn/usr.bin/pascal/libpc/READ4.c (revision 6498)
11679Smckusick /* Copyright (c) 1979 Regents of the University of California */
21679Smckusick 
3*6498Smckusick static char sccsid[] = "@(#)READ4.c 1.6 04/09/82";
41679Smckusick 
51679Smckusick #include "h00vars.h"
6*6498Smckusick #include <errno.h>
7*6498Smckusick extern int errno;
81679Smckusick 
93019Smckusic long
101679Smckusick READ4(curfile)
111679Smckusick 
121679Smckusick 	register struct iorec	*curfile;
131679Smckusick {
143019Smckusic 	long			data;
153019Smckusic 	int			retval;
161679Smckusick 
171679Smckusick 	if (curfile->funit & FWRITE) {
183869Smckusic 		ERROR("%s: Attempt to read, but open for writing\n",
193869Smckusic 			curfile->pfname);
201679Smckusick 		return;
211679Smckusick 	}
221679Smckusick 	UNSYNC(curfile);
23*6498Smckusick 	errno = 0;
242223Smckusic 	retval = fscanf(curfile->fbuf, "%ld", &data);
252223Smckusic 	if (retval == EOF) {
263869Smckusic 		ERROR("%s: Tried to read past end of file\n", curfile->pfname);
272223Smckusic 		return;
282223Smckusic 	}
292223Smckusic 	if (retval == 0) {
303869Smckusic 		ERROR("%s: Bad data found on integer read\n", curfile->pfname);
311679Smckusick 		return;
321679Smckusick 	}
33*6498Smckusick 	if (errno == ERANGE) {
34*6498Smckusick 		ERROR("%s: Overflow on integer read\n", curfile->pfname);
35*6498Smckusick 		return;
36*6498Smckusick 	}
37*6498Smckusick 	if (errno != 0) {
38*6498Smckusick 		PERROR(curfile->pfname);
39*6498Smckusick 		return;
40*6498Smckusick 	}
412309Smckusic 	curfile->funit &= ~EOLN;
421679Smckusick 	curfile->funit |= SYNC;
431679Smckusick 	return data;
441679Smckusick }
45