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