| /* read sequential formatted external */ |
| #include "config.h" |
| #include "f2c.h" |
| #include "fio.h" |
| #include "fmt.h" |
| |
| int |
| xrd_SL (void) |
| { |
| int ch; |
| if (!f__curunit->uend) |
| while ((ch = getc (f__cf)) != '\n') |
| if (ch == EOF) |
| { |
| f__curunit->uend = 1; |
| break; |
| } |
| f__cursor = f__recpos = 0; |
| return (1); |
| } |
| |
| int |
| x_getc (void) |
| { |
| int ch; |
| if (f__curunit->uend) |
| return (EOF); |
| ch = getc (f__cf); |
| if (ch != EOF && ch != '\n') |
| { |
| f__recpos++; |
| return (ch); |
| } |
| if (ch == '\n') |
| { |
| (void) ungetc (ch, f__cf); |
| return (ch); |
| } |
| if (f__curunit->uend || feof (f__cf)) |
| { |
| errno = 0; |
| f__curunit->uend = 1; |
| return (-1); |
| } |
| return (-1); |
| } |
| |
| int |
| x_endp (void) |
| { |
| xrd_SL (); |
| return f__curunit->uend == 1 ? EOF : 0; |
| } |
| |
| int |
| x_rev (void) |
| { |
| (void) xrd_SL (); |
| return (0); |
| } |
| |
| integer |
| s_rsfe (cilist * a) /* start */ |
| { |
| int n; |
| if (f__init != 1) |
| f_init (); |
| f__init = 3; |
| f__reading = 1; |
| f__sequential = 1; |
| f__formatted = 1; |
| f__external = 1; |
| if ((n = c_sfe (a))) |
| return (n); |
| f__elist = a; |
| f__cursor = f__recpos = 0; |
| f__scale = 0; |
| f__fmtbuf = a->cifmt; |
| f__curunit = &f__units[a->ciunit]; |
| f__cf = f__curunit->ufd; |
| if (pars_f (f__fmtbuf) < 0) |
| err (a->cierr, 100, "startio"); |
| f__getn = x_getc; |
| f__doed = rd_ed; |
| f__doned = rd_ned; |
| fmt_bg (); |
| f__doend = x_endp; |
| f__donewrec = xrd_SL; |
| f__dorevert = x_rev; |
| f__cblank = f__curunit->ublnk; |
| f__cplus = 0; |
| if (f__curunit->uwrt && f__nowreading (f__curunit)) |
| err (a->cierr, errno, "read start"); |
| if (f__curunit->uend) |
| err (f__elist->ciend, (EOF), "read start"); |
| return (0); |
| } |