1*1660Smckusick /* Copyright (c) 1979 Regents of the University of California */
2*1660Smckusick 
3*1660Smckusick static char sccsid[] = "@(#)IOSYNC.c 1.1 10/30/80";
4*1660Smckusick 
5*1660Smckusick #include "h00vars.h"
6*1660Smckusick #include "h01errs.h"
7*1660Smckusick 
8*1660Smckusick /*
9*1660Smckusick  * insure that a usable image is in the buffer window
10*1660Smckusick  */
11*1660Smckusick IOSYNC(curfile)
12*1660Smckusick 
13*1660Smckusick 	register struct iorec	*curfile;
14*1660Smckusick {
15*1660Smckusick 	register short		unit = curfile->funit;
16*1660Smckusick 	char			*limit, *ptr;
17*1660Smckusick 
18*1660Smckusick 	if (unit & FWRITE) {
19*1660Smckusick 		ERROR(EREADIT, curfile->pfname);
20*1660Smckusick 		return;
21*1660Smckusick 	}
22*1660Smckusick 	if ((unit & SYNC) == 0) {
23*1660Smckusick 		return;
24*1660Smckusick 	}
25*1660Smckusick 	if (unit & EOFF) {
26*1660Smckusick 		ERROR(EPASTEOF, curfile->pfname);
27*1660Smckusick 		return;
28*1660Smckusick 	}
29*1660Smckusick 	unit &= ~SYNC;
30*1660Smckusick 	fread(curfile->fileptr, curfile->fsize, 1, curfile->fbuf);
31*1660Smckusick 	if (ferror(curfile->fbuf)) {
32*1660Smckusick 		ERROR(EPASTEOF, curfile->pfname);
33*1660Smckusick 		return;
34*1660Smckusick 	}
35*1660Smckusick 	if (feof(curfile->fbuf)) {
36*1660Smckusick 		curfile->funit = unit | EOFF;
37*1660Smckusick 		limit = &curfile->fileptr[curfile->fsize];
38*1660Smckusick 		for (ptr = curfile->fileptr; ptr < limit; )
39*1660Smckusick 			*ptr++ = 0;
40*1660Smckusick 		return;
41*1660Smckusick 	}
42*1660Smckusick 	if (unit & FTEXT) {
43*1660Smckusick 		if (*curfile->fileptr == '\n') {
44*1660Smckusick 			unit |= EOLN;
45*1660Smckusick 			*curfile->fileptr = ' ';
46*1660Smckusick 		} else {
47*1660Smckusick 			unit &= ~EOLN;
48*1660Smckusick 		}
49*1660Smckusick 	}
50*1660Smckusick 	curfile->funit = unit;
51*1660Smckusick }
52