xref: /csrg-svn/usr.bin/f77/libI77/rdfe.c (revision 47943)
1*47943Sbostic /*-
2*47943Sbostic  * Copyright (c) 1980 The Regents of the University of California.
3*47943Sbostic  * All rights reserved.
420990Slibs  *
5*47943Sbostic  * %sccs.include.proprietary.c%
623084Skre  */
723084Skre 
8*47943Sbostic #ifndef lint
9*47943Sbostic static char sccsid[] = "@(#)rdfe.c	5.2 (Berkeley) 04/12/91";
10*47943Sbostic #endif /* not lint */
11*47943Sbostic 
1223084Skre /*
1320990Slibs  * read direct formatted external i/o
1420990Slibs  */
1520990Slibs 
1620990Slibs #include "fio.h"
1720990Slibs 
1820990Slibs extern int rd_ed(),rd_ned();
1920990Slibs int y_getc(),y_rnew(),y_tab();
2020990Slibs 
2120990Slibs LOCAL char rdfe[] = "read dfe";
2220990Slibs 
s_rdfe(a)2320990Slibs s_rdfe(a) cilist *a;
2420990Slibs {
2520990Slibs 	int n;
2620990Slibs 	reading = YES;
2720990Slibs 	if(n=c_dfe(a,READ,rdfe)) return(n);
2820990Slibs 	if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rdfe)
2920990Slibs 	getn = y_getc;
3020990Slibs 	doed = rd_ed;
3120990Slibs 	doned = rd_ned;
3220990Slibs 	dotab = y_tab;
3320990Slibs 	dorevert = doend = donewrec = y_rnew;
3420990Slibs 	if(pars_f()) err(errflag,F_ERFMT,rdfe)
3520990Slibs 	fmt_bg();
3620990Slibs 	return(OK);
3720990Slibs }
3820990Slibs 
e_rdfe()3920990Slibs e_rdfe()
4020990Slibs {
4120990Slibs 	en_fio();
4220990Slibs 	return(OK);
4320990Slibs }
4420990Slibs 
4520990Slibs LOCAL
y_getc()4620990Slibs y_getc()
4720990Slibs {
4820990Slibs 	int ch;
4920990Slibs 	if(curunit->uend) return(EOF);
5020990Slibs 	if(curunit->url==1 || recpos++ < curunit->url)
5120990Slibs 	{
5220990Slibs 		if((ch=getc(cf))!=EOF)
5320990Slibs 		{
5420990Slibs 				return(ch);
5520990Slibs 		}
5620990Slibs 		if(feof(cf))
5720990Slibs 		{
5820990Slibs 			curunit->uend = YES;
5920990Slibs 			return(EOF);
6020990Slibs 		}
6120990Slibs 		err(errflag,errno,rdfe);
6220990Slibs 	}
6320990Slibs 	else return(' ');
6420990Slibs }
6520990Slibs 
6620990Slibs /*
6720990Slibs /*y_rev()
6820990Slibs /*{	/*what about work done?*/
6920990Slibs /*	if(curunit->url==1) return(0);
7020990Slibs /*	while(recpos<curunit->url) (*putn)(' ');
7120990Slibs /*	recpos=0;
7220990Slibs /*	return(0);
7320990Slibs /*}
7420990Slibs /*
7520990Slibs /*y_err()
7620990Slibs /*{
7720990Slibs /*	err(errflag, F_EREREC, rdfe+5);
7820990Slibs /*}
7920990Slibs */
8020990Slibs 
8120990Slibs LOCAL
y_rnew()8220990Slibs y_rnew()
8320990Slibs {	if(curunit->url != 1)
8420990Slibs 	{	fseek(cf,(long)curunit->url*(++recnum),0);
8520990Slibs 		recpos = reclen = cursor = 0;
8620990Slibs 	}
8720990Slibs 	return(OK);
8820990Slibs }
89