+/* read sequential formatted external */
+#include "fio.h"
+#include "fmt.h"
+extern int x_getc(),rd_ed(),rd_ned();
+extern int x_endp(),x_rev(),xrd_SL();
+s_rsfe(a) cilist *a; /* start */
+{ int n;
+ if(!init) f_init();
+ if(n=c_sfe(a,READ)) return(n);
+ reading=1;
+ sequential=1;
+ formatted=1;
+ external=1;
+ elist=a;
+ cursor=recpos=0;
+ scale=0;
+ fmtbuf=a->cifmt;
+ if(pars_f(fmtbuf)<0) err(a->cierr,100,"startio");
+ curunit= &units[a->ciunit];
+ cf=curunit->ufd;
+ getn= x_getc;
+ doed= rd_ed;
+ doned= rd_ned;
+ fmt_bg();
+ doend=x_endp;
+ donewrec=xrd_SL;
+ dorevert=x_rev;
+ cblank=curunit->ublnk;
+ cplus=0;
+ if(curunit->uwrt) nowreading(curunit);
+ return(0);
+}
+xrd_SL()
+{ int ch;
+ if(!curunit->uend)
+ while((ch=getc(cf))!='\n' && ch!=EOF);
+ cursor=recpos=0;
+ return(1);
+}
+x_getc()
+{ int ch;
+ if(curunit->uend) return(EOF);
+ if((ch=getc(cf))!=EOF && ch!='\n')
+ { recpos++;
+ return(ch);
+ }
+ if(ch=='\n')
+ { ungetc(ch,cf);
+ return(ch);
+ }
+ if(feof(cf))
+ { errno=0;
+ curunit->uend=1;
+ return(-1);
+ }
+ return(-1);
+}
+x_endp()
+{
+ xrd_SL();
+ return(0);
+}
+x_rev()
+{
+ xrd_SL();
+ return(0);
+}