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