* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
* fatal(): i/o error routine
* flush_(): flush file buffer
unit units
[MXUNIT
]; /*unit table*/
flag reading
; /*1 if reading, 0 if writing*/
flag external
; /*1 if external io, 0 if internal */
flag sequential
; /*1 if sequential io, 0 if direct*/
flag formatted
; /*1 if formatted io, 0 if unformatted,
-1 if list directed, -2 if namelist */
char *fmtbuf
, *icptr
, *icend
, *fmtptr
;
int (*doed
)(),(*doned
)();
int (*doend
)(),(*donewrec
)(),(*dorevert
)(),(*dotab
)();
int (*getn
)(),(*putn
)(),(*ungetn
)(); /*for formatted io*/
FILE *cf
; /*current file structure*/
unit
*curunit
; /*current unit structure*/
int lunit
; /*current logical unit*/
char *lfname
; /*current filename*/
int recpos
; /*place in current record*/
ftnint recnum
; /* current record number */
int reclen
; /* current record length */
ioflag signit
,tab
,cplus
,cblank
,elist
,errflag
,endflag
,lquit
,l_first
;
struct ioiflg ioiflg_
; /* initialization flags */
extern char *f_errlist
[];
for (lu
=1; lu
< MXUNIT
; lu
++)
fprintf(stderr
,"%s: [%d] end of file\n",s
,n
);
else if(n
>=0 && n
<sys_nerr
)
fprintf(stderr
,"%s: [%d] %s\n",s
,n
, strerror(n
));
else if(n
>=F_ER
&& n
<F_MAXERR
)
fprintf(stderr
,"%s: [%d] %s\n",s
,n
,f_errlist
[n
-F_ER
]);
fprintf(stderr
,"%s: [%d] unknown error number\n",s
,n
);
if(!lfname
) switch (lunit
)
{ case STDERR
: lfname
= "stderr";
case STDIN
: lfname
= "stdin";
case STDOUT
: lfname
= "stdout";
fprintf(stderr
,"logical unit %d, named '%s'\n",lunit
,lfname
);
{ fprintf(stderr
,"lately: %s %s %s %s I/O\n",
reading
?"reading":"writing",
sequential
?"sequential":"direct",
formatted
>0?"formatted":(formatted
==0?"unformatted":
(formatted
==LISTDIRECTED
?"list":"namelist")),
external
?"external":"internal");
{ if(fmtbuf
) prnt_fmt(n
);
{ if(reading
&& curunit
->useek
)
prnt_ext(); /* print external data */
else prnt_int(); /* print internal array */
fprintf (stderr
, "part of last data: ");
loc
= ftell(curunit
->ufd
);
{ if(loc
==1L) rewind(curunit
->ufd
);
else for(;i
<12 && last_char(curunit
->ufd
)!='\n';i
++);
while(i
--) ffputc(fgetc(curunit
->ufd
),stderr
);
for(i
=0;i
<5 && (ch
=fgetc(curunit
->ufd
))!=EOF
;i
++) ffputc(ch
,stderr
);
fprintf (stderr
,"part of last string: ");
ep
= icptr
- (recpos
<12?recpos
:12);
while (ep
<icptr
) ffputc(*ep
++,stderr
);
while (ep
<(icptr
+5) && ep
<icend
) ffputc(*ep
++,stderr
);
fprintf(stderr
, "format: ");
ep
= fmtptr
- (i
<25?i
:25);
if(ep
!= fmtbuf
) fprintf(stderr
, "... ");
{ ffputc((*ep
==GLITCH
)?'"':*ep
,stderr
);
if(ep
==fmtptr
) fputc('|',stderr
);
if(*ep
) fprintf(stderr
, " ...");
if (c
< ' ' || c
== 0177)