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