char id_dfe[] = "@(#)dfe.c 1.3";
* direct formatted external i/o
extern int rd_ed(),rd_ned(),w_ed(),w_ned();
int y_getc(),y_putc(),y_rnew(),y_wnew(),y_tab();
char rdfe
[] = "read dfe";
char wdfe
[] = "write dfe";
if(n
=c_dfe(a
,READ
)) return(n
);
if(curunit
->uwrt
&& ! nowreading(curunit
)) err(errflag
, errno
, rdfe
)
dorevert
= doend
= donewrec
= y_rnew
;
if(pars_f(fmtbuf
)) err(errflag
,F_ERFMT
,rdfe
)
if(n
=c_dfe(a
,WRITE
)) return(n
);
if(!curunit
->uwrt
&& ! nowwriting(curunit
)) err(errflag
, errno
, wdfe
)
dorevert
= doend
= donewrec
= y_wnew
;
if(pars_f(fmtbuf
)) err(errflag
,F_ERFMT
,wdfe
)
external
= formatted
= FORMATTED
;
cursor
=scale
=recpos
=reclen
=0;
if(not_legal(lunit
)) err(errflag
,F_ERUNIT
,rdfe
+5);
if(!curunit
->ufd
&& (n
=fk_open(flag
,DIR,FMT
,(ftnint
)lunit
)))
if(!curunit
->ufmt
) err(errflag
,F_ERNOFIO
,rdfe
+5)
if(!curunit
->useek
|| !curunit
->url
) err(errflag
,F_ERNODIO
,rdfe
+5)
fseek(cf
, (long)curunit
->url
* recnum
, 0);
if(curunit
->uend
) return(EOF
);
if(curunit
->url
==1 || recpos
++ < curunit
->url
)
if(curunit
->url
!=1 && recpos
++ >= curunit
->url
) err(errflag
,F_EREREC
,wdfe
)
if(cursor
< 0 && -cursor
> ftell(cf
)) return(F_ERBREC
);
{ if(reclen
< recpos
) reclen
= recpos
;
if((recpos
+ cursor
) < 0) return(F_ERBREC
);
n
= reclen
- recpos
; /* n >= 0 */
if(!reading
&& (cursor
-n
) > 0)
while(cursor
--) if(n
=(*putn
)(' ')) return(n
);
if(recpos
>= curunit
->url
) err(errflag
,F_EREREC
,rdfe
+5)
fseek(cf
,(long)cursor
,1);
/*{ /*what about work done?*/
/* if(curunit->url==1) return(0);
/* while(recpos<curunit->url) (*putn)(' ');
/* err(errflag, F_EREREC, rdfe+5);
{ fseek(cf
,(long)curunit
->url
*(++recnum
),0);
recpos
= reclen
= cursor
= 0;
{ fseek(cf
,(long)(reclen
-recpos
),1);
while(recpos
< curunit
->url
) (*putn
)(' ');
recpos
= reclen
= cursor
= 0;