xref: /csrg-svn/usr.bin/f77/libI77/rsfe.c (revision 24097)
120987Slibs /*
223088Skre  * Copyright (c) 1980 Regents of the University of California.
323088Skre  * All rights reserved.  The Berkeley software License Agreement
423088Skre  * specifies the terms and conditions for redistribution.
520987Slibs  *
6*24097Sjerry  *	@(#)rsfe.c	5.2	07/30/85
723088Skre  */
823088Skre 
923088Skre /*
1020987Slibs  * read sequential formatted external
1120987Slibs  */
1220987Slibs 
1320987Slibs #include "fio.h"
1420987Slibs 
1520987Slibs extern int rd_ed(),rd_ned();
1620987Slibs int x_rnew(),x_getc(),x_tab();
1720987Slibs 
1820987Slibs LOCAL char rsfe[] = "read sfe";
1920987Slibs 
2020987Slibs s_rsfe(a) cilist *a; /* start */
2120987Slibs {	int n;
2220987Slibs 	reading = YES;
23*24097Sjerry 	sequential = YES;
2420987Slibs 	if(n=c_sfe(a,READ,SEQ,rsfe)) return (n);
2520987Slibs 	if(curunit->url) err(errflag,F_ERNOSIO,rsfe)
2620987Slibs 	if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rsfe)
2720987Slibs 	getn= x_getc;
2820987Slibs 	doed= rd_ed;
2920987Slibs 	doned= rd_ned;
3020987Slibs 	donewrec = dorevert = doend = x_rnew;
3120987Slibs 	dotab = x_tab;
3220987Slibs 	if(pars_f()) err(errflag,F_ERFMT,rsfe)
3320987Slibs 	fmt_bg();
3420987Slibs 	return(OK);
3520987Slibs }
3620987Slibs 
3720987Slibs LOCAL
3820987Slibs x_rnew()			/* find next record */
3920987Slibs {	int ch;
4020987Slibs 	if(curunit->uend)
4120987Slibs 		return(EOF);
4220987Slibs 	while((ch=getc(cf))!='\n' && ch!=EOF);
4320987Slibs 	if(feof(cf))
4420987Slibs 	{	curunit->uend = YES;
4520987Slibs 		if (recpos==0) return(EOF);
4620987Slibs 	}
4720987Slibs 	cursor=recpos=reclen=0;
4820987Slibs 	return(OK);
4920987Slibs }
5020987Slibs 
5120987Slibs LOCAL
5220987Slibs x_getc()
5320987Slibs {	int ch;
5420987Slibs 	if(curunit->uend) return(EOF);
5520987Slibs 	if((ch=getc(cf))!=EOF && ch!='\n')
5620987Slibs 	{	recpos++;
5720987Slibs 		return(ch);
5820987Slibs 	}
5920987Slibs 	if(ch=='\n')
6020987Slibs 	{	ungetc(ch,cf);
6120987Slibs 		return(ch);
6220987Slibs 	}
6320987Slibs 	if(feof(cf)) curunit->uend = YES;
6420987Slibs 	return(EOF);
6520987Slibs }
6620987Slibs 
6720987Slibs e_rsfe()
6820987Slibs {	int n;
6920987Slibs 	n=en_fio();
7020987Slibs 	fmtbuf=NULL;
7120987Slibs 	return(n);
7220987Slibs }
73