9eea165746c09df1d67b2450b0c1325d9e09af62
[unix-history] / usr / src / usr.bin / f77 / libI77 / rsfe.c
/*
* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
* @(#)rsfe.c 5.2 %G%
*/
/*
* read sequential formatted external
*/
#include "fio.h"
extern int rd_ed(),rd_ned();
int x_rnew(),x_getc(),x_tab();
LOCAL char rsfe[] = "read sfe";
s_rsfe(a) cilist *a; /* start */
{ int n;
reading = YES;
sequential = YES;
if(n=c_sfe(a,READ,SEQ,rsfe)) return (n);
if(curunit->url) err(errflag,F_ERNOSIO,rsfe)
if(curunit->uwrt && ! nowreading(curunit)) err(errflag, errno, rsfe)
getn= x_getc;
doed= rd_ed;
doned= rd_ned;
donewrec = dorevert = doend = x_rnew;
dotab = x_tab;
if(pars_f()) err(errflag,F_ERFMT,rsfe)
fmt_bg();
return(OK);
}
LOCAL
x_rnew() /* find next record */
{ int ch;
if(curunit->uend)
return(EOF);
while((ch=getc(cf))!='\n' && ch!=EOF);
if(feof(cf))
{ curunit->uend = YES;
if (recpos==0) return(EOF);
}
cursor=recpos=reclen=0;
return(OK);
}
LOCAL
x_getc()
{ int ch;
if(curunit->uend) return(EOF);
if((ch=getc(cf))!=EOF && ch!='\n')
{ recpos++;
return(ch);
}
if(ch=='\n')
{ ungetc(ch,cf);
return(ch);
}
if(feof(cf)) curunit->uend = YES;
return(EOF);
}
e_rsfe()
{ int n;
n=en_fio();
fmtbuf=NULL;
return(n);
}