| #include "f2c.h" |
| #include "fio.h" |
| #include "lio.h" |
| #include "fmt.h" /* for f__doend */ |
| |
| extern flag f__lquit; |
| extern int f__lcount; |
| extern char *f__icptr; |
| extern char *f__icend; |
| extern icilist *f__svic; |
| extern int f__icnum, f__recpos; |
| |
| static int |
| i_getc (void) |
| { |
| if (f__recpos >= f__svic->icirlen) |
| { |
| if (f__recpos++ == f__svic->icirlen) |
| return '\n'; |
| z_rnew (); |
| } |
| f__recpos++; |
| if (f__icptr >= f__icend) |
| return EOF; |
| return (*f__icptr++); |
| } |
| |
| static int |
| i_ungetc (int ch __attribute__ ((__unused__)), |
| FILE * f __attribute__ ((__unused__))) |
| { |
| if (--f__recpos == f__svic->icirlen) |
| return '\n'; |
| if (f__recpos < -1) |
| err (f__svic->icierr, 110, "recend"); |
| /* *--icptr == ch, and icptr may point to read-only memory */ |
| return *--f__icptr /* = ch */ ; |
| } |
| |
| static void |
| c_lir (icilist * a) |
| { |
| extern int l_eof; |
| if (f__init != 1) |
| f_init (); |
| f__init = 3; |
| f__reading = 1; |
| f__external = 0; |
| f__formatted = 1; |
| f__svic = a; |
| L_len = a->icirlen; |
| f__recpos = -1; |
| f__icnum = f__recpos = 0; |
| f__cursor = 0; |
| l_getc = i_getc; |
| l_ungetc = i_ungetc; |
| l_eof = 0; |
| f__icptr = a->iciunit; |
| f__icend = f__icptr + a->icirlen * a->icirnum; |
| f__cf = 0; |
| f__curunit = 0; |
| f__elist = (cilist *) a; |
| } |
| |
| |
| integer |
| s_rsli (icilist * a) |
| { |
| f__lioproc = l_read; |
| f__lquit = 0; |
| f__lcount = 0; |
| c_lir (a); |
| f__doend = 0; |
| return (0); |
| } |
| |
| integer |
| e_rsli (void) |
| { |
| f__init = 1; |
| return 0; |
| } |
| |
| extern int x_rsne (cilist *); |
| |
| integer |
| s_rsni (icilist * a) |
| { |
| extern int nml_read; |
| integer rv; |
| cilist ca; |
| ca.ciend = a->iciend; |
| ca.cierr = a->icierr; |
| ca.cifmt = a->icifmt; |
| c_lir (a); |
| rv = x_rsne (&ca); |
| nml_read = 0; |
| return rv; |
| } |