1 #include "stdio.h"
2 #include "errno.h"
3 #ifndef NULL
4 /* ANSI C */
5 #include "stddef.h"
6 #endif
7 
8 #ifndef SEEK_SET
9 #define SEEK_SET 0
10 #define SEEK_CUR 1
11 #define SEEK_END 2
12 #endif
13 
14 #ifdef MSDOS
15 #ifndef NON_UNIX_STDIO
16 #define NON_UNIX_STDIO
17 #endif
18 #endif
19 
20 #ifdef UIOLEN_int
21 typedef int uiolen;
22 #else
23 typedef long uiolen;
24 #endif
25 
26 /*units*/
27 typedef struct
28 {	FILE *ufd;	/*0=unconnected*/
29 	char *ufnm;
30 #ifndef MSDOS
31 	long uinode;
32 	int udev;
33 #endif
34 	int url;	/*0=sequential*/
35 	flag useek;	/*true=can backspace, use dir, ...*/
36 	flag ufmt;
37 	flag urw;	/* (1 for can read) | (2 for can write) */
38 	flag ublnk;
39 	flag uend;
40 	flag uwrt;	/*last io was write*/
41 	flag uscrtch;
42 } unit;
43 
44 extern flag f__init;
45 extern cilist *f__elist;	/*active external io list*/
46 extern flag f__reading,f__external,f__sequential,f__formatted;
47 #undef Void
48 #ifdef KR_headers
49 #define Void /*void*/
50 extern int (*f__getn)();	/* for formatted input */
51 extern void (*f__putn)();	/* for formatted output */
52 extern void x_putc();
53 extern long f__inode();
54 extern VOID sig_die();
55 extern int (*f__donewrec)(), t_putc(), x_wSL();
56 extern int c_sfe(), err__fl(), xrd_SL(), f__putbuf();
57 #else
58 #define Void void
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 extern int (*f__getn)(void);	/* for formatted input */
63 extern void (*f__putn)(int);	/* for formatted output */
64 extern void x_putc(int);
65 extern long f__inode(char*,int*);
66 extern void sig_die(char*,int);
67 extern void f__fatal(int,char*);
68 extern int t_runc(alist*);
69 extern int f__nowreading(unit*), f__nowwriting(unit*);
70 extern int fk_open(int,int,ftnint);
71 extern int en_fio(void);
72 extern void f_init(void);
73 extern int (*f__donewrec)(void), t_putc(int), x_wSL(void);
74 extern void b_char(char*,char*,ftnlen), g_char(char*,ftnlen,char*);
75 extern int c_sfe(cilist*), z_rnew(void);
76 extern int isatty(int);
77 extern int err__fl(int,int,char*);
78 extern int xrd_SL(void);
79 extern int f__putbuf(int);
80 #ifdef __cplusplus
81 	}
82 #endif
83 #endif
84 extern int (*f__doend)(Void);
85 extern FILE *f__cf;	/*current file*/
86 extern unit *f__curunit;	/*current unit*/
87 extern unit f__units[];
88 #define err(f,m,s) {if(f) errno= m; else f__fatal(m,s); return(m);}
89 #define errfl(f,m,s) return err__fl((int)f,m,s)
90 
91 /*Table sizes*/
92 #define MXUNIT 100
93 
94 extern int f__recpos;	/*position in current record*/
95 extern int f__cursor;	/* offset to move to */
96 extern int f__hiwater;	/* so TL doesn't confuse us */
97 
98 #define WRITE	1
99 #define READ	2
100 #define SEQ	3
101 #define DIR	4
102 #define FMT	5
103 #define UNF	6
104 #define EXT	7
105 #define INT	8
106 
107 #define buf_end(x) (x->_flag & _IONBF ? x->_ptr : x->_base + BUFSIZ)
108