projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tolerate short records on non-seekable input. DLW
[unix-history]
/
usr
/
src
/
usr.bin
/
f77
/
libI77
/
sfe.c
diff --git
a/usr/src/usr.bin/f77/libI77/sfe.c
b/usr/src/usr.bin/f77/libI77/sfe.c
index
1edd2a2
..
a948645
100644
(file)
--- a/
usr/src/usr.bin/f77/libI77/sfe.c
+++ b/
usr/src/usr.bin/f77/libI77/sfe.c
@@
-1,5
+1,5
@@
/*
/*
-char id_sfe[] = "@(#)sfe.c 1.
2
";
+char id_sfe[] = "@(#)sfe.c 1.
8
";
*
* sequential formatted external routines
*/
*
* sequential formatted external routines
*/
@@
-13,25
+13,33
@@
char id_sfe[] = "@(#)sfe.c 1.2";
extern int rd_ed(),rd_ned();
int x_rnew(),x_getc(),x_tab();
extern int rd_ed(),rd_ned();
int x_rnew(),x_getc(),x_tab();
+char rsfe[] = "read sfe";
+char wsfe[] = "write sfe";
+
s_rsfe(a) cilist *a; /* start */
{ int n;
reading = YES;
if(n=c_sfe(a,READ)) return(n);
s_rsfe(a) cilist *a; /* start */
{ int n;
reading = YES;
if(n=c_sfe(a,READ)) return(n);
- if(curunit->uwrt
) nowreading(curunit);
+ 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;
getn= x_getc;
doed= rd_ed;
doned= rd_ned;
donewrec = dorevert = doend = x_rnew;
dotab = x_tab;
- if(pars_f(fmtbuf)) err(errflag,F_ERFMT,
"read sfe"
)
+ if(pars_f(fmtbuf)) err(errflag,F_ERFMT,
rsfe
)
fmt_bg();
return(OK);
}
x_rnew() /* find next record */
{ int ch;
fmt_bg();
return(OK);
}
x_rnew() /* find next record */
{ int ch;
- if(!curunit->uend)
- while((ch=getc(cf))!='\n' && ch!=EOF);
+ 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);
}
cursor=recpos=reclen=0;
return(OK);
}
@@
-68,15
+76,15
@@
c_sfe(a,flag) cilist *a; /* check */
errflag = a->cierr;
endflag = a->ciend;
lunit = a->ciunit;
errflag = a->cierr;
endflag = a->ciend;
lunit = a->ciunit;
- if(not_legal(lunit)) err(errflag,F_ERUNIT,
"sfe"
);
+ if(not_legal(lunit)) err(errflag,F_ERUNIT,
rsfe+5
);
curunit = p = &units[lunit];
if(!p->ufd && (n=fk_open(flag,SEQ,FMT,(ftnint)lunit)) )
curunit = p = &units[lunit];
if(!p->ufd && (n=fk_open(flag,SEQ,FMT,(ftnint)lunit)) )
- err(errflag,n,
"sfe"
)
+ err(errflag,n,
rsfe+5
)
cf = curunit->ufd;
elist = YES;
lfname = curunit->ufnm;
cf = curunit->ufd;
elist = YES;
lfname = curunit->ufnm;
- if(!p->ufmt) err(errflag,F_ERNOFIO,
"sfe"
)
- if(p->url) err(errflag,F_ERNOSIO,
"sfe"
)
+ if(!p->ufmt) err(errflag,F_ERNOFIO,
rsfe+5
)
+ if(p->url) err(errflag,F_ERNOSIO,
rsfe+5
)
cursor=recpos=scale=reclen=0;
radix = 10;
signit = YES;
cursor=recpos=scale=reclen=0;
radix = 10;
signit = YES;
@@
-97,7
+105,7
@@
s_wsfe(a) cilist *a; /*start*/
{ int n;
reading = NO;
if(n=c_sfe(a,WRITE)) return(n);
{ int n;
reading = NO;
if(n=c_sfe(a,WRITE)) return(n);
- if(!curunit->uwrt
) nowwriting(curunit);
+ if(!curunit->uwrt
&& ! nowwriting(curunit)) err(errflag, errno, wsfe)
curunit->uend = NO;
if (curunit->uprnt) putn = pr_put;
else putn = x_putc;
curunit->uend = NO;
if (curunit->uprnt) putn = pr_put;
else putn = x_putc;
@@
-107,7
+115,7
@@
s_wsfe(a) cilist *a; /*start*/
doend = x_wend;
dorevert = donewrec = x_wnew;
dotab = x_tab;
doend = x_wend;
dorevert = donewrec = x_wnew;
dotab = x_tab;
- if(pars_f(fmtbuf)) err(errflag,F_ERFMT,
"write sfe"
)
+ if(pars_f(fmtbuf)) err(errflag,F_ERFMT,
wsfe
)
fmt_bg();
return(OK);
}
fmt_bg();
return(OK);
}
@@
-141,7
+149,7
@@
x_tab()
{ int n;
if(reclen < recpos) reclen = recpos;
if(curunit->useek)
{ int n;
if(reclen < recpos) reclen = recpos;
if(curunit->useek)
- { if((recpos+cursor) < 0)
return(F_ERBREC);
+ { if((recpos+cursor) < 0)
cursor = -recpos; /* to BOR */
n = reclen - recpos; /* distance to eor, n>=0 */
if((cursor-n) > 0)
{ fseek(cf,(long)n,1); /* find current eor */
n = reclen - recpos; /* distance to eor, n>=0 */
if((cursor-n) > 0)
{ fseek(cf,(long)n,1); /* find current eor */
@@
-159,10
+167,7
@@
x_tab()
while(cursor--)
{ if(reading)
{ n = (*getn)();
while(cursor--)
{ if(reading)
{ n = (*getn)();
- if(n=='\n')
- { (*ungetn)(n,cf);
- return(F_EREREC);
- }
+ if(n=='\n') return(cursor=0); /* be tolerant */
if(n==EOF) return(EOF);
}
else (*putn)(' '); /* fill in the empty record */
if(n==EOF) return(EOF);
}
else (*putn)(' '); /* fill in the empty record */