extern char *f__r_mode
[], *f__w_mode
[];
integer
f_end(a
) alist
*a
;
if(a
->aunit
>=MXUNIT
|| a
->aunit
<0) err(a
->aerr
,101,"endfile");
(void) sprintf(nbuf
,"fort.%ld",a
->aunit
);
if (tf
= fopen(nbuf
, f__w_mode
[0]))
close(creat(nbuf
, 0666));
return(b
->useek
? t_runc(a
) : 0);
copy(from
, len
, to
) char *from
, *to
; register long len
;
copy(FILE *from
, register long len
, FILE *to
)
while(fread(buf
, len1
= len
> BUFSIZ
? BUFSIZ
: (int)len
, 1, from
)) {
if (!fwrite(buf
, len1
, 1, to
))
copy(from
, len
, to
) char *from
, *to
; register long len
;
copy(char *from
, register long len
, char *to
)
if ((k
= open(from
, O_RDONLY
)) < 0)
if ((tmp
= creat(to
,0666)) < 0)
while((n
= read(k
, buf
, len
> BUFSIZ
? BUFSIZ
: (int)len
)) > 0) {
if (write(tmp
, buf
, n
) != n
)
char nm
[L_tmpnam
+12]; /* extra space in case L_tmpnam is tiny */
return(0); /*don't truncate direct files*/
if (loc
>= len
|| b
->useek
== 0 || b
->ufnm
== NULL
)
rewind(b
->ufd
); /* empty buffer */
if (!(bf
= fopen(b
->ufnm
, f__w_mode
[b
->ufmt
])))
if (close(creat(b
->ufnm
,0666)))
strcpy(nm
,"tmp.FXXXXXX");
if (!(bf
= fopen(b
->ufnm
, f__r_mode
[0]))) {
if (!(tf
= fopen(nm
, f__w_mode
[0])))
if (!(bf
= freopen(b
->ufnm
, f__w_mode
[0], bf
)))
if (!(tf
= freopen(nm
, f__r_mode
[0], tf
)))
if (f__w_mode
[0] != f__w_mode
[b
->ufmt
]) {
if (!(bf
= freopen(b
->ufnm
, f__w_mode
[b
->ufmt
+2], bf
)))
fseek(bf
, loc
, SEEK_SET
);
if (copy(b
->ufnm
, loc
, nm
)
|| copy(nm
, loc
, b
->ufnm
))
fseek(b
->ufd
, loc
, SEEK_SET
);
err(a
->aerr
,111,"endfile");