ack/lang/fortran/lib/libI77/iio.c
1991-10-07 16:59:33 +00:00

117 lines
1.8 KiB
C

#include "f2c.h"
#include "fio.h"
#include "fmt.h"
extern char *icptr;
char *icend;
extern icilist *svic;
extern int rd_ed(),rd_ned(),w_ed(),w_ned(),y_ierr();
extern int z_wnew();
int icnum;
extern int hiwater;
z_getc()
{
if(icptr >= icend) err(svic->iciend,(EOF),"endfile");
if(recpos++ < svic->icirlen)
return(*icptr++);
else err(svic->icierr,110,"recend");
}
z_putc(c)
{
if(icptr >= icend) err(svic->icierr,110,"inwrite");
if(recpos++ < svic->icirlen)
*icptr++ = c;
else err(svic->icierr,110,"recend");
return 0;
}
z_rnew()
{
icptr = svic->iciunit + (++icnum)*svic->icirlen;
recpos = 0;
cursor = 0;
hiwater = 0;
return 1;
}
static int
z_endp(a) icilist *a;
{
(*donewrec)();
return 0;
}
integer s_rsfi(a) icilist *a;
{ int n;
if(n=c_si(a)) return(n);
reading=1;
doed=rd_ed;
doned=rd_ned;
getn=z_getc;
dorevert = y_ierr;
donewrec = z_rnew;
doend = z_endp;
return(0);
}
integer s_wsfi(a) icilist *a;
{ int n;
if(n=c_si(a)) return(n);
reading=0;
doed=w_ed;
doned=w_ned;
putn=z_putc;
dorevert = y_ierr;
donewrec = z_wnew;
doend = z_endp;
return(0);
}
c_si(a) icilist *a;
{
elist = (cilist *)a;
fmtbuf=a->icifmt;
if(pars_f(fmtbuf)<0)
err(a->icierr,100,"startint");
fmt_bg();
sequential=formatted=1;
external=0;
cblank=cplus=scale=0;
svic=a;
icnum=recpos=0;
cursor = 0;
hiwater = 0;
icptr = a->iciunit;
icend = icptr + a->icirlen*a->icirnum;
curunit = 0;
return(0);
}
z_wnew()
{
while(recpos++ < svic->icirlen)
*icptr++ = ' ';
recpos = 0;
cursor = 0;
hiwater = 0;
icnum++;
return 1;
}
integer e_rsfi()
{ int n;
n = en_fio();
fmtbuf = NULL;
return(n);
}
integer e_wsfi()
{
int n;
n = en_fio();
fmtbuf = NULL;
if(icnum >= svic->icirnum)
return(n);
while(recpos++ < svic->icirlen)
*icptr++ = ' ';
return(n);
}
y_ierr()
{
err(elist->cierr, 110, "iio");
}