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