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