date and time created 82/01/18 19:21:15 by linton
[unix-history] / usr / src / usr.bin / pascal / libpc / IOSYNC.c
... / ...
CommitLineData
1/* Copyright (c) 1979 Regents of the University of California */
2
3static char sccsid[] = "@(#)IOSYNC.c 1.5 %G%";
4
5#include "h00vars.h"
6
7/*
8 * insure that a usable image is in the buffer window
9 */
10IOSYNC(curfile)
11
12 register struct iorec *curfile;
13{
14 char *limit, *ptr;
15
16 if (curfile->funit & FWRITE) {
17 ERROR("%s: Attempt to read, but open for writing\n",
18 curfile->pfname);
19 return;
20 }
21 if ((curfile->funit & SYNC) == 0) {
22 return;
23 }
24 if (curfile->funit & EOFF) {
25 ERROR("%s: Tried to read past end of file\n", curfile->pfname);
26 return;
27 }
28 curfile->funit &= ~SYNC;
29 if (curfile->funit & SPEOLN) {
30 curfile->funit &= ~(SPEOLN|EOLN);
31 curfile->funit |= EOFF;
32 return;
33 }
34 fread(curfile->fileptr, (int)curfile->fsize, 1, curfile->fbuf);
35 if (ferror(curfile->fbuf)) {
36 ERROR("%s: Tried to read past end of file\n", curfile->pfname);
37 return;
38 }
39 if (feof(curfile->fbuf)) {
40 if (curfile->funit & FTEXT) {
41 *curfile->fileptr = ' ';
42 if (curfile->funit & EOLN) {
43 curfile->funit &= ~EOLN;
44 curfile->funit |= EOFF;
45 return;
46 }
47 curfile->funit |= (SPEOLN|EOLN);
48 return;
49 }
50 curfile->funit |= EOFF;
51 limit = &curfile->fileptr[curfile->fsize];
52 for (ptr = curfile->fileptr; ptr < limit; )
53 *ptr++ = 0;
54 return;
55 }
56 if (curfile->funit & FTEXT) {
57 if (*curfile->fileptr == '\n') {
58 curfile->funit |= EOLN;
59 *curfile->fileptr = ' ';
60 return;
61 }
62 curfile->funit &= ~EOLN;
63 }
64}