1*47943Sbostic /*-
2*47943Sbostic * Copyright (c) 1980 The Regents of the University of California.
3*47943Sbostic * All rights reserved.
420987Slibs *
5*47943Sbostic * %sccs.include.proprietary.c%
623088Skre */
723088Skre
8*47943Sbostic #ifndef lint
9*47943Sbostic static char sccsid[] = "@(#)rsfe.c 5.3 (Berkeley) 04/12/91";
10*47943Sbostic #endif /* not lint */
11*47943Sbostic
1223088Skre /*
1320987Slibs * read sequential formatted external
1420987Slibs */
1520987Slibs
1620987Slibs #include "fio.h"
1720987Slibs
1820987Slibs extern int rd_ed(),rd_ned();
1920987Slibs int x_rnew(),x_getc(),x_tab();
2020987Slibs
2120987Slibs LOCAL char rsfe[] = "read sfe";
2220987Slibs
s_rsfe(a)2320987Slibs s_rsfe(a) cilist *a; /* start */
2420987Slibs { int n;
2520987Slibs reading = YES;
2624097Sjerry sequential = YES;
2720987Slibs if(n=c_sfe(a,READ,SEQ,rsfe)) return (n);
2820987Slibs if(curunit->url) err(errflag,F_ERNOSIO,rsfe)
2920987Slibs if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rsfe)
3020987Slibs getn= x_getc;
3120987Slibs doed= rd_ed;
3220987Slibs doned= rd_ned;
3320987Slibs donewrec = dorevert = doend = x_rnew;
3420987Slibs dotab = x_tab;
3520987Slibs if(pars_f()) err(errflag,F_ERFMT,rsfe)
3620987Slibs fmt_bg();
3720987Slibs return(OK);
3820987Slibs }
3920987Slibs
4020987Slibs LOCAL
x_rnew()4120987Slibs x_rnew() /* find next record */
4220987Slibs { int ch;
4320987Slibs if(curunit->uend)
4420987Slibs return(EOF);
4520987Slibs while((ch=getc(cf))!='\n' && ch!=EOF);
4620987Slibs if(feof(cf))
4720987Slibs { curunit->uend = YES;
4820987Slibs if (recpos==0) return(EOF);
4920987Slibs }
5020987Slibs cursor=recpos=reclen=0;
5120987Slibs return(OK);
5220987Slibs }
5320987Slibs
5420987Slibs LOCAL
x_getc()5520987Slibs x_getc()
5620987Slibs { int ch;
5720987Slibs if(curunit->uend) return(EOF);
5820987Slibs if((ch=getc(cf))!=EOF && ch!='\n')
5920987Slibs { recpos++;
6020987Slibs return(ch);
6120987Slibs }
6220987Slibs if(ch=='\n')
6320987Slibs { ungetc(ch,cf);
6420987Slibs return(ch);
6520987Slibs }
6620987Slibs if(feof(cf)) curunit->uend = YES;
6720987Slibs return(EOF);
6820987Slibs }
6920987Slibs
e_rsfe()7020987Slibs e_rsfe()
7120987Slibs { int n;
7220987Slibs n=en_fio();
7320987Slibs fmtbuf=NULL;
7420987Slibs return(n);
7520987Slibs }
76