char id_sfe[] = "@(#)sfe.c 1.6";
* sequential formatted external routines
* read sequential formatted external
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 */
if(n
=c_sfe(a
,READ
)) return(n
);
if(curunit
->uwrt
&& ! nowreading(curunit
)) err(errflag
, errno
, rsfe
)
donewrec
= dorevert
= doend
= x_rnew
;
if(pars_f(fmtbuf
)) err(errflag
,F_ERFMT
,rsfe
)
x_rnew() /* find next record */
while((ch
=getc(cf
))!='\n' && ch
!=EOF
);
if (recpos
==0) return(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
,rsfe
+5);
curunit
= p
= &units
[lunit
];
if(!p
->ufd
&& (n
=fk_open(flag
,SEQ
,FMT
,(ftnint
)lunit
)) )
if(!p
->ufmt
) err(errflag
,F_ERNOFIO
,rsfe
+5)
if(p
->url
) err(errflag
,F_ERNOSIO
,rsfe
+5)
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
)) err(errflag
, errno
, wsfe
)
if (curunit
->uprnt
) putn
= pr_put
;
dorevert
= donewrec
= x_wnew
;
if(pars_f(fmtbuf
)) err(errflag
,F_ERFMT
,wsfe
)
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) cursor
= -recpos
; /* to BOR */
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);