char id_sfe[] = "@(#)sfe.c 1.2";
* sequential formatted external routines
* read sequential formatted external
extern int rd_ed(),rd_ned();
int x_rnew(),x_getc(),x_tab();
s_rsfe(a
) cilist
*a
; /* start */
if(n
=c_sfe(a
,READ
)) return(n
);
if(curunit
->uwrt
) nowreading(curunit
);
donewrec
= dorevert
= doend
= x_rnew
;
if(pars_f(fmtbuf
)) err(errflag
,F_ERFMT
,"read sfe")
x_rnew() /* find next record */
while((ch
=getc(cf
))!='\n' && ch
!=EOF
);
if(curunit
->uend
) return(EOF
);
if((ch
=getc(cf
))!=EOF
&& ch
!='\n')
if(feof(cf
)) curunit
->uend
= YES
;
c_sfe(a
,flag
) cilist
*a
; /* check */
external
=sequential
=formatted
=FORMATTED
;
if(not_legal(lunit
)) err(errflag
,F_ERUNIT
,"sfe");
curunit
= p
= &units
[lunit
];
if(!p
->ufd
&& (n
=fk_open(flag
,SEQ
,FMT
,(ftnint
)lunit
)) )
if(!p
->ufmt
) err(errflag
,F_ERNOFIO
,"sfe")
if(p
->url
) err(errflag
,F_ERNOSIO
,"sfe")
cursor
=recpos
=scale
=reclen
=0;
* write sequential formatted external
extern int w_ed(),w_ned();
int x_putc(),pr_put(),x_wend(),x_wnew();
s_wsfe(a
) cilist
*a
; /*start*/
if(n
=c_sfe(a
,WRITE
)) return(n
);
if(!curunit
->uwrt
) nowwriting(curunit
);
if (curunit
->uprnt
) putn
= pr_put
;
dorevert
= donewrec
= x_wnew
;
if(pars_f(fmtbuf
)) err(errflag
,F_ERFMT
,"write sfe")
if(c
=='\n') recpos
= reclen
= cursor
= 0;
recpos
= reclen
= cursor
= 0;
else if(c
=='1') c
= '\f';
if(reclen
< recpos
) reclen
= recpos
;
{ if((recpos
+cursor
) < 0) return(F_ERBREC
);
n
= reclen
- recpos
; /* distance to eor, n>=0 */
{ fseek(cf
,(long)n
,1); /* find current eor */
{ fseek(cf
,(long)cursor
,1); /* do not pass go */
if(cursor
< 0) return(F_ERSEEK
); /* can't go back */
else (*putn
)(' '); /* fill in the empty record */
if(reclen
>recpos
) fseek(cf
,(long)(reclen
-recpos
),1);
if(reclen
>recpos
) fseek(cf
,(long)(reclen
-recpos
),1);