X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/43666f586a07df804e7baa1f2a270cf05a66d1ec..a77ebcfd7e8afd3a4f78174930ed1202595de813:/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 1edd2a2a9c..a9486457a8 100644 --- 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 */ @@ -13,25 +13,33 @@ char id_sfe[] = "@(#)sfe.c 1.2"; 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); - 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; - 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; - 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); } @@ -68,15 +76,15 @@ c_sfe(a,flag) cilist *a; /* check */ 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)) ) - err(errflag,n,"sfe") + err(errflag,n,rsfe+5) 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; @@ -97,7 +105,7 @@ s_wsfe(a) cilist *a; /*start*/ { 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; @@ -107,7 +115,7 @@ s_wsfe(a) cilist *a; /*start*/ 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); } @@ -141,7 +149,7 @@ x_tab() { 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 */ @@ -159,10 +167,7 @@ x_tab() 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 */