From 66e600ddf2c62444f4b875fee84cae8aa16da88c Mon Sep 17 00:00:00 2001 From: David Wasley Date: Thu, 19 Feb 1981 02:01:21 -0800 Subject: [PATCH] date and time created 81/02/18 18:01:21 by dlw SCCS-vsn: usr.bin/f77/libI77/iio.c 1.1 --- usr/src/usr.bin/f77/libI77/iio.c | 248 +++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 usr/src/usr.bin/f77/libI77/iio.c diff --git a/usr/src/usr.bin/f77/libI77/iio.c b/usr/src/usr.bin/f77/libI77/iio.c new file mode 100644 index 0000000000..34ab46ff0e --- /dev/null +++ b/usr/src/usr.bin/f77/libI77/iio.c @@ -0,0 +1,248 @@ +/* +char id_iio[] = "@(#)iio.c 1.1"; + * + * internal (character array) i/o + */ + +#include "fio.h" +#include "lio.h" + +extern int rd_ed(),rd_ned(),w_ed(),w_ned(); +extern int l_read(),l_write(); +int z_wnew(),z_rnew(),z_tab(); + +z_getc() +{ + if(icptr >= icend && !recpos) /* new rec beyond eof */ + { leof = EOF; + return(EOF); + } + if(recpos++ < svic->icirlen) return(*icptr++); + return(' '); +} + +z_putc(c) char c; +{ + if(icptr < icend) + { if(c=='\n') return(z_wnew()); + if(recpos++ < svic->icirlen) + { *icptr++ = c; + return(OK); + } + else err(errflag,110,"iio") + } + leof = EOF; +#ifndef KOSHER + err(endflag,EOF,"iio") /* NOT STANDARD, end-of-file on writes */ +#endif +#ifdef KOSHER + err(errflag,110,"iio") +#endif +} + +z_ungetc(ch,cf) char ch; +{ if(ch==EOF || --recpos >= svic->icirlen) return(OK); + if(--icptr < svic->iciunit || recpos < 0) err(errflag,107,"ilio") + *icptr = ch; + return(OK); +} + +s_rsfi(a) icilist *a; +{ + reading = YES; + doed=rd_ed; + doned=rd_ned; + getn=z_getc; + doend = donewrec = z_rnew; + dorevert = z_rnew; + dotab = z_tab; + return(c_si(a)); +} + +s_wsfi(a) icilist *a; +{ + reading = NO; + doed=w_ed; + doned=w_ned; + putn=z_putc; + doend = donewrec = z_wnew; + dorevert = z_wnew; + dotab = z_tab; + return(c_si(a)); +} + +s_rdfi(a) icilist *a; +{ + reading = YES; + doed = rd_ed; + doned = rd_ned; + getn = z_getc; + donewrec = z_rnew; + dorevert = doend = z_rnew; + dotab = z_tab; + return(c_di(a)); +} + +s_wdfi(a) icilist *a; +{ + reading = NO; + doed = w_ed; + doned = w_ned; + putn = z_putc; + donewrec = z_wnew; + dorevert = doend = z_wnew; + dotab = z_tab; + return(c_di(a)); +} + +c_fi(a) icilist *a; +{ + fmtbuf=a->icifmt; + formatted = FORMATTED; + external = NO; + cblank=cplus=NO; + scale=cursor=0; + radix = 10; + signit = YES; + elist = YES; + svic = a; + recpos=reclen=0; + icend = a->iciunit + a->icirnum*a->icirlen; + errflag = a->icierr; + endflag = a->iciend; + if(pars_f(fmtbuf)) err(errflag,100,"ifio") + fmt_bg(); + return(OK); +} + +c_si(a) icilist *a; +{ + sequential = YES; + recnum = 0; + icptr = a->iciunit; + return(c_fi(a)); +} + +c_di(a) icilist *a; +{ + sequential = NO; + recnum = a->icirec - 1; + icptr = a->iciunit + recnum*a->icirlen; + return(c_fi(a)); +} + +z_rnew() +{ + icptr = svic->iciunit + (++recnum)*svic->icirlen; + recpos = reclen = cursor = 0; + return(OK); +} + +z_wnew() +{ + if(reclen > recpos) + { icptr += (reclen - recpos); + recpos = reclen; + } + while(recpos < svic->icirlen) (*putn)(' '); + recpos = reclen = cursor = 0; + recnum++; + return(OK); +} + +z_tab() +{ int n; + if(reclen < recpos) reclen = recpos; + if((recpos + cursor) < 0) return(107); + n = reclen - recpos; + if(!reading && (cursor-n) > 0) + { icptr += n; + recpos = reclen; + cursor -= n; + while(cursor--) if(n=(*putn)(' ')) return(n); + } + else + { icptr += cursor; + recpos += cursor; + } + return(cursor=0); +} + +e_rsfi() +{ int n; + n = en_fio(); + fmtbuf = NULL; + return(n); +} + +e_wsfi() +{ + return(e_rsfi()); +} + +e_rdfi() +{ + return(e_rsfi()); +} + +e_wdfi() +{ + return(e_wsfi()); +} + +c_li(a) icilist *a; +{ + fmtbuf="int list io"; + sequential = formatted = LISTDIRECTED; + external = NO; + elist = YES; + svic = a; + recnum = recpos = 0; + cplus = cblank = NO; + icptr = a->iciunit; + icend = icptr + a->icirlen * a->icirnum; + errflag = a->icierr; + endflag = a->iciend; + leof = NO; + return(OK); +} + +s_rsli(a) icilist *a; +{ + reading = YES; + lioproc = l_read; + getn = z_getc; + ungetn = z_ungetc; + l_first = YES; + lcount = 0; + lquit = NO; + return(c_li(a)); +} + +s_wsli(a) icilist *a; +{ + reading = NO; + putn = z_putc; + lioproc = l_write; + line_len = a->icirlen; + return(c_li(a)); +} + +e_rsli() +{ fmtbuf = NULL; + return(OK); +} + +e_wsli() +{ fmtbuf = NULL; + reclen = recpos; + return(z_wnew()); +} + +ftnint +iiorec_() +{ return(recnum); } + +ftnint +iiopos_() +{ return(recpos); } -- 2.20.1