date and time created 81/02/18 18:01:21 by dlw
authorDavid Wasley <dlw@ucbvax.Berkeley.EDU>
Thu, 19 Feb 1981 10:01:21 +0000 (02:01 -0800)
committerDavid Wasley <dlw@ucbvax.Berkeley.EDU>
Thu, 19 Feb 1981 10:01:21 +0000 (02:01 -0800)
SCCS-vsn: usr.bin/f77/libI77/iio.c 1.1

usr/src/usr.bin/f77/libI77/iio.c [new file with mode: 0644]

diff --git a/usr/src/usr.bin/f77/libI77/iio.c b/usr/src/usr.bin/f77/libI77/iio.c
new file mode 100644 (file)
index 0000000..34ab46f
--- /dev/null
@@ -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); }