11660Smckusick /* Copyright (c) 1979 Regents of the University of California */ 21660Smckusick 3*3867Smckusic static char sccsid[] = "@(#)IOSYNC.c 1.5 06/10/81"; 41660Smckusick 51660Smckusick #include "h00vars.h" 61660Smckusick 71660Smckusick /* 81660Smckusick * insure that a usable image is in the buffer window 91660Smckusick */ 101660Smckusick IOSYNC(curfile) 111660Smckusick 121660Smckusick register struct iorec *curfile; 131660Smckusick { 141660Smckusick char *limit, *ptr; 151660Smckusick 162232Smckusic if (curfile->funit & FWRITE) { 17*3867Smckusic ERROR("%s: Attempt to read, but open for writing\n", 18*3867Smckusic curfile->pfname); 191660Smckusick return; 201660Smckusick } 212232Smckusic if ((curfile->funit & SYNC) == 0) { 221660Smckusick return; 231660Smckusick } 242232Smckusic if (curfile->funit & EOFF) { 25*3867Smckusic ERROR("%s: Tried to read past end of file\n", curfile->pfname); 261660Smckusick return; 271660Smckusick } 282232Smckusic curfile->funit &= ~SYNC; 292232Smckusic if (curfile->funit & SPEOLN) { 302232Smckusic curfile->funit &= ~(SPEOLN|EOLN); 312232Smckusic curfile->funit |= EOFF; 322232Smckusic return; 332232Smckusic } 343009Smckusic fread(curfile->fileptr, (int)curfile->fsize, 1, curfile->fbuf); 351660Smckusick if (ferror(curfile->fbuf)) { 36*3867Smckusic ERROR("%s: Tried to read past end of file\n", curfile->pfname); 371660Smckusick return; 381660Smckusick } 391660Smckusick if (feof(curfile->fbuf)) { 402232Smckusic if (curfile->funit & FTEXT) { 412218Smckusic *curfile->fileptr = ' '; 422232Smckusic if (curfile->funit & EOLN) { 432232Smckusic curfile->funit &= ~EOLN; 442232Smckusic curfile->funit |= EOFF; 452232Smckusic return; 462232Smckusic } 472232Smckusic curfile->funit |= (SPEOLN|EOLN); 482218Smckusic return; 492218Smckusic } 502232Smckusic curfile->funit |= EOFF; 511660Smckusick limit = &curfile->fileptr[curfile->fsize]; 521660Smckusick for (ptr = curfile->fileptr; ptr < limit; ) 531660Smckusick *ptr++ = 0; 541660Smckusick return; 551660Smckusick } 562232Smckusic if (curfile->funit & FTEXT) { 571660Smckusick if (*curfile->fileptr == '\n') { 582232Smckusic curfile->funit |= EOLN; 591660Smckusick *curfile->fileptr = ' '; 602232Smckusic return; 611660Smckusick } 622232Smckusic curfile->funit &= ~EOLN; 631660Smckusick } 641660Smckusick } 65