xref: /csrg-svn/usr.bin/f77/libI77/rsfe.c (revision 47943)
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