#include "config.h" #include "f2c.h" #include "fio.h" #include "fmt.h" int y_rsk (void) { if (f__curunit->uend || f__curunit->url <= f__recpos || f__curunit->url == 1) return 0; do { getc (f__cf); } while (++f__recpos < f__curunit->url); return 0; } int y_getc (void) { int ch; if (f__curunit->uend) return (-1); if ((ch = getc (f__cf)) != EOF) { f__recpos++; if (f__curunit->url >= f__recpos || f__curunit->url == 1) return (ch); else return (' '); } if (feof (f__cf)) { f__curunit->uend = 1; errno = 0; return (-1); } err (f__elist->cierr, errno, "readingd"); } static int y_rev (void) { if (f__recpos < f__hiwater) f__recpos = f__hiwater; if (f__curunit->url > 1) while (f__recpos < f__curunit->url) (*f__putn) (' '); if (f__recpos) f__putbuf (0); f__recpos = 0; return (0); } static int y_err (void) { err (f__elist->cierr, 110, "dfe"); } static int y_newrec (void) { y_rev (); f__hiwater = f__cursor = 0; return (1); } int c_dfe (cilist * a) { f__sequential = 0; f__formatted = f__external = 1; f__elist = a; f__cursor = f__scale = f__recpos = 0; f__curunit = &f__units[a->ciunit]; if (a->ciunit > MXUNIT || a->ciunit < 0) err (a->cierr, 101, "startchk"); if (f__curunit->ufd == NULL && fk_open (DIR, FMT, a->ciunit)) err (a->cierr, 104, "dfe"); f__cf = f__curunit->ufd; if (!f__curunit->ufmt) err (a->cierr, 102, "dfe"); if (!f__curunit->useek) err (a->cierr, 104, "dfe"); f__fmtbuf = a->cifmt; if (a->cirec <= 0) err (a->cierr, 130, "dfe"); FSEEK (f__cf, (off_t) f__curunit->url * (a->cirec - 1), SEEK_SET); f__curunit->uend = 0; return (0); } integer s_rdfe (cilist * a) { int n; if (f__init != 1) f_init (); f__init = 3; f__reading = 1; if ((n = c_dfe (a))) return (n); if (f__curunit->uwrt && f__nowreading (f__curunit)) err (a->cierr, errno, "read start"); f__getn = y_getc; f__doed = rd_ed; f__doned = rd_ned; f__dorevert = f__donewrec = y_err; f__doend = y_rsk; if (pars_f (f__fmtbuf) < 0) err (a->cierr, 100, "read start"); fmt_bg (); return (0); } integer s_wdfe (cilist * a) { int n; if (f__init != 1) f_init (); f__init = 3; f__reading = 0; if ((n = c_dfe (a))) return (n); if (f__curunit->uwrt != 1 && f__nowwriting (f__curunit)) err (a->cierr, errno, "startwrt"); f__putn = x_putc; f__doed = w_ed; f__doned = w_ned; f__dorevert = y_err; f__donewrec = y_newrec; f__doend = y_rev; if (pars_f (f__fmtbuf) < 0) err (a->cierr, 100, "startwrt"); fmt_bg (); return (0); } integer e_rdfe (void) { f__init = 1; en_fio (); return (0); } integer e_wdfe (void) { f__init = 1; return en_fio (); }