#define STR(x) (x==NULL?"":x)
unit units
[MXUNIT
]; /*unit table*/
flag init
; /*0 on entry, 1 after initializations*/
cilist
*elist
; /*active external io list*/
flag reading
; /*1 if reading, 0 if writing*/
flag external
; /*1 if external io, 0 if internal */
int (*doed
)(),(*doned
)();
int (*doend
)(),(*donewrec
)(),(*dorevert
)();
flag sequential
; /*1 if sequential io, 0 if direct*/
flag formatted
; /*1 if formatted io, 0 if unformatted*/
int (*getn
)(),(*putn
)(); /*for formatted io*/
FILE *cf
; /*current file*/
unit
*curunit
; /*current unit*/
int recpos
; /*place in current record*/
"formatted io not allowed",
"unformatted io not allowed",
"sequential io not allowed",
"truncation failed in endfile",
"incomprehensible list input",
"read unexpected character",
"blank logical input field",
#define MAXERR (sizeof(F_err)/sizeof(char *)+100)
if(n
<100 && n
>=0) perror(s
); /*SYSDEP*/
{ fprintf(stderr
,"%s: illegal error number %d\n",s
,n
);
else if(n
<0) fprintf(stderr
,"%s: end of file %d\n",s
,n
);
fprintf(stderr
,"%s: %s\n",s
,F_err
[n
-100]);
fprintf(stderr
,"apparent state: unit %d named %s\n",curunit
-units
,
fprintf(stderr
,"last format: %s\n",STR(fmtbuf
));
fprintf(stderr
,"lately %s %s %s %s IO\n",reading
?"reading":"writing",
sequential
?"sequential":"direct",formatted
?"formatted":"unformatted",
external
?"external":"internal");
/*initialization routine*/
p
->useek
=canseek(stderr
);
p
->useek
=canseek(stdout
);
canseek(f
) FILE *f
; /*SYSDEP*/
if(x
.st_nlink
> 0 /*pipe*/ && !isatty(fileno(f
)))
freopen(x
->ufnm
,"r",x
->ufd
);
freopen(x
->ufnm
,"a",x
->ufd
);