diff options
Diffstat (limited to 'libf2c/libI77/rsli.c')
-rw-r--r-- | libf2c/libI77/rsli.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/libf2c/libI77/rsli.c b/libf2c/libI77/rsli.c new file mode 100644 index 0000000..c07632a --- /dev/null +++ b/libf2c/libI77/rsli.c @@ -0,0 +1,99 @@ +#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; +} |