140865Sbostic /*- 2*62092Sbostic * Copyright (c) 1979, 1993 3*62092Sbostic * The Regents of the University of California. All rights reserved. 440865Sbostic * 540865Sbostic * %sccs.include.redist.c% 640865Sbostic */ 71660Smckusick 840865Sbostic #ifndef lint 9*62092Sbostic static char sccsid[] = "@(#)IOSYNC.c 8.1 (Berkeley) 06/06/93"; 1040865Sbostic #endif /* not lint */ 111660Smckusick 121660Smckusick #include "h00vars.h" 131660Smckusick 141660Smckusick /* 151660Smckusick * insure that a usable image is in the buffer window 161660Smckusick */ IOSYNC(curfile)171660SmckusickIOSYNC(curfile) 181660Smckusick 191660Smckusick register struct iorec *curfile; 201660Smckusick { 211660Smckusick char *limit, *ptr; 221660Smckusick 232232Smckusic if (curfile->funit & FWRITE) { 243867Smckusic ERROR("%s: Attempt to read, but open for writing\n", 253867Smckusic curfile->pfname); 261660Smckusick return; 271660Smckusick } 282232Smckusic if ((curfile->funit & SYNC) == 0) { 291660Smckusick return; 301660Smckusick } 312232Smckusic if (curfile->funit & EOFF) { 323867Smckusic ERROR("%s: Tried to read past end of file\n", curfile->pfname); 331660Smckusick return; 341660Smckusick } 352232Smckusic curfile->funit &= ~SYNC; 362232Smckusic if (curfile->funit & SPEOLN) { 372232Smckusic curfile->funit &= ~(SPEOLN|EOLN); 382232Smckusic curfile->funit |= EOFF; 392232Smckusic return; 402232Smckusic } 413009Smckusic fread(curfile->fileptr, (int)curfile->fsize, 1, curfile->fbuf); 421660Smckusick if (ferror(curfile->fbuf)) { 433867Smckusic ERROR("%s: Tried to read past end of file\n", curfile->pfname); 441660Smckusick return; 451660Smckusick } 461660Smckusick if (feof(curfile->fbuf)) { 472232Smckusic if (curfile->funit & FTEXT) { 482218Smckusic *curfile->fileptr = ' '; 492232Smckusic if (curfile->funit & EOLN) { 502232Smckusic curfile->funit &= ~EOLN; 512232Smckusic curfile->funit |= EOFF; 522232Smckusic return; 532232Smckusic } 542232Smckusic curfile->funit |= (SPEOLN|EOLN); 552218Smckusic return; 562218Smckusic } 572232Smckusic curfile->funit |= EOFF; 581660Smckusick limit = &curfile->fileptr[curfile->fsize]; 591660Smckusick for (ptr = curfile->fileptr; ptr < limit; ) 601660Smckusick *ptr++ = 0; 611660Smckusick return; 621660Smckusick } 632232Smckusic if (curfile->funit & FTEXT) { 641660Smckusick if (*curfile->fileptr == '\n') { 652232Smckusic curfile->funit |= EOLN; 661660Smckusick *curfile->fileptr = ' '; 672232Smckusic return; 681660Smckusick } 692232Smckusic curfile->funit &= ~EOLN; 701660Smckusick } 711660Smckusick } 72