11660Smckusick /* Copyright (c) 1979 Regents of the University of California */ 21660Smckusick 3*2232Smckusic static char sccsid[] = "@(#)IOSYNC.c 1.3 01/26/81"; 41660Smckusick 51660Smckusick #include "h00vars.h" 61660Smckusick #include "h01errs.h" 71660Smckusick 81660Smckusick /* 91660Smckusick * insure that a usable image is in the buffer window 101660Smckusick */ 111660Smckusick IOSYNC(curfile) 121660Smckusick 131660Smckusick register struct iorec *curfile; 141660Smckusick { 151660Smckusick char *limit, *ptr; 161660Smckusick 17*2232Smckusic if (curfile->funit & FWRITE) { 181660Smckusick ERROR(EREADIT, curfile->pfname); 191660Smckusick return; 201660Smckusick } 21*2232Smckusic if ((curfile->funit & SYNC) == 0) { 221660Smckusick return; 231660Smckusick } 24*2232Smckusic if (curfile->funit & EOFF) { 251660Smckusick ERROR(EPASTEOF, curfile->pfname); 261660Smckusick return; 271660Smckusick } 28*2232Smckusic curfile->funit &= ~SYNC; 29*2232Smckusic if (curfile->funit & SPEOLN) { 30*2232Smckusic curfile->funit &= ~(SPEOLN|EOLN); 31*2232Smckusic curfile->funit |= EOFF; 32*2232Smckusic return; 33*2232Smckusic } 341660Smckusick fread(curfile->fileptr, curfile->fsize, 1, curfile->fbuf); 351660Smckusick if (ferror(curfile->fbuf)) { 361660Smckusick ERROR(EPASTEOF, curfile->pfname); 371660Smckusick return; 381660Smckusick } 391660Smckusick if (feof(curfile->fbuf)) { 40*2232Smckusic if (curfile->funit & FTEXT) { 412218Smckusic *curfile->fileptr = ' '; 42*2232Smckusic if (curfile->funit & EOLN) { 43*2232Smckusic curfile->funit &= ~EOLN; 44*2232Smckusic curfile->funit |= EOFF; 45*2232Smckusic return; 46*2232Smckusic } 47*2232Smckusic curfile->funit |= (SPEOLN|EOLN); 482218Smckusic return; 492218Smckusic } 50*2232Smckusic curfile->funit |= EOFF; 511660Smckusick limit = &curfile->fileptr[curfile->fsize]; 521660Smckusick for (ptr = curfile->fileptr; ptr < limit; ) 531660Smckusick *ptr++ = 0; 541660Smckusick return; 551660Smckusick } 56*2232Smckusic if (curfile->funit & FTEXT) { 571660Smckusick if (*curfile->fileptr == '\n') { 58*2232Smckusic curfile->funit |= EOLN; 591660Smckusick *curfile->fileptr = ' '; 60*2232Smckusic return; 611660Smckusick } 62*2232Smckusic curfile->funit &= ~EOLN; 631660Smckusick } 641660Smckusick } 65