|
|
1.1 ! root 1: #ifndef _SFIO_H /* protect against multiple #includes */ ! 2: #define _SFIO_H ! 3: ! 4: #if __STDC__ || __cplusplus || c_plusplus ! 5: #define _SFA_(x) x ! 6: #else ! 7: #define _SFA_(x) () ! 8: #endif ! 9: ! 10: #ifndef NULL ! 11: #define NULL 0 ! 12: #endif ! 13: #ifndef EOF ! 14: #define EOF (-1) ! 15: #endif ! 16: #ifndef SEEK_SET ! 17: #define SEEK_SET 0 ! 18: #define SEEK_CUR 1 ! 19: #define SEEK_END 2 ! 20: #endif ! 21: ! 22: typedef struct _sfdc_ Sfdisc_t; ! 23: typedef struct _sfio_ Sfile_t, SFIO; ! 24: ! 25: /* discipline structure */ ! 26: struct _sfdc_ ! 27: { ! 28: int (*readf) _SFA_((Sfile_t*, unsigned char*, int, char*)); ! 29: int (*writef) _SFA_((Sfile_t*, const unsigned char*, int, char*)); ! 30: long (*seekf) _SFA_((Sfile_t*, long, int, char*)); ! 31: int (*exceptf) _SFA_((Sfile_t*, int, char*)); ! 32: char *handle; /* to store any state information */ ! 33: }; ! 34: ! 35: /* a file structure */ ! 36: struct _sfio_ ! 37: { ! 38: unsigned char *next; /* next position to read/write from */ ! 39: unsigned char *endw; /* end of write buffer */ ! 40: unsigned char *endr; /* end of read buffer */ ! 41: unsigned char *endb; /* end of buffer */ ! 42: struct _sfio_ *push; /* the stream that was pushed on */ ! 43: short flags; /* type of stream */ ! 44: short file; /* file descriptor */ ! 45: long orig; /* where we start in the file */ ! 46: #ifdef _SFIO_PRIVATE ! 47: _SFIO_PRIVATE ! 48: #endif ! 49: }; ! 50: ! 51: /* bits for various types of files */ ! 52: #define SF_READ 000001 /* open for reading */ ! 53: #define SF_WRITE 000002 /* open for writing */ ! 54: #define SF_STRING 000004 /* a string stream */ ! 55: #define SF_APPEND 000010 /* associated file is in append mode */ ! 56: #define SF_RELATIVE 000020 /* file pos is relative to starting pos */ ! 57: #define SF_MALLOC 000040 /* buffered space malloc-ed */ ! 58: #define SF_LINE 000100 /* line buffering */ ! 59: #define SF_KEEPFD 000200 /* keep file opened when closing stream */ ! 60: #define SF_SHARE 000400 /* file stream that is shared */ ! 61: #define SF_REUSE 001000 /* keep stream space after closing */ ! 62: #define SF_FLAGS 000777 /* PUBLIC FLAGS PASSABLE TO SFNEW() */ ! 63: #define SF_SETS 001743 /* flags passable to sfset() */ ! 64: ! 65: #define SF_EOF 002000 /* eof was detected */ ! 66: #define SF_ERROR 004000 /* an error happened */ ! 67: ! 68: #define SF_BUFSIZE 8192 /* suggested default buffer size */ ! 69: #define SF_UNBOUND (-1) /* unbounded buffer size */ ! 70: ! 71: #define sfstdin (&_Sfstdin) /* standard input stream */ ! 72: #define sfstdout (&_Sfstdout) /* standard output stream */ ! 73: #define sfstderr (&_Sfstderr) /* standard error stream */ ! 74: ! 75: #if __cplusplus ! 76: extern "C" ! 77: { ! 78: #endif ! 79: ! 80: extern int _Sfi; ! 81: extern Sfile_t _Sfstdin, _Sfstdout, _Sfstderr; ! 82: ! 83: extern Sfile_t *sfnew _SFA_((Sfile_t*, unsigned char*, int, int, int)); ! 84: extern Sfile_t *sfopen _SFA_((Sfile_t*, const char*, const char*)); ! 85: extern Sfile_t *sfdopen _SFA_((int, const char*)); ! 86: extern Sfile_t *sfpopen _SFA_((const char*, const char*, Sfile_t**)); ! 87: extern Sfile_t *sfstack _SFA_((Sfile_t*, Sfile_t*)); ! 88: extern Sfile_t *_sftmpfile _SFA_((int)); ! 89: extern int _sfflsbuf _SFA_((Sfile_t*, int)); ! 90: extern int _sffilbuf _SFA_((Sfile_t*, int)); ! 91: extern int _sfsync _SFA_((Sfile_t*)); ! 92: extern int _sfpeek _SFA_((Sfile_t*, unsigned char**)); ! 93: extern int sfclrlock _SFA_((Sfile_t*)); ! 94: extern unsigned char* sfsetbuf _SFA_((Sfile_t*, unsigned char*, int)); ! 95: extern Sfdisc_t* sfsetdisc _SFA_((Sfile_t*,Sfdisc_t*)); ! 96: extern int sfnotice _SFA_((void(*)(Sfile_t*, int))); ! 97: extern int sfset _SFA_((Sfile_t*, int, int)); ! 98: extern int sfpool _SFA_((Sfile_t*, Sfile_t*, int)); ! 99: extern int sfread _SFA_((Sfile_t*, unsigned char*, int)); ! 100: extern int sfwrite _SFA_((Sfile_t*, const unsigned char*, int)); ! 101: extern int sfmove _SFA_((Sfile_t*, Sfile_t*, long, const char*)); ! 102: extern int sfclose _SFA_((Sfile_t*)); ! 103: extern long sftell _SFA_((Sfile_t*)); ! 104: extern long sfseek _SFA_((Sfile_t*, long, int)); ! 105: extern int sfllen _SFA_((long)); ! 106: extern int sfdlen _SFA_((double)); ! 107: extern int sfputs _SFA_((Sfile_t*, const char*, int)); ! 108: extern char *sfgets _SFA_((Sfile_t*, char*, int)); ! 109: extern int sfnputc _SFA_((Sfile_t*, unsigned char, int)); ! 110: extern int _sfputu _SFA_((Sfile_t*, unsigned long)); ! 111: extern int _sfputl _SFA_((Sfile_t*, long)); ! 112: extern long _sfgetl _SFA_((Sfile_t*)); ! 113: extern unsigned long _sfgetu _SFA_((Sfile_t*)); ! 114: extern long _sfgetl _SFA_((Sfile_t*)); ! 115: extern int _sfputd _SFA_((Sfile_t*, double)); ! 116: extern double sfgetd _SFA_((Sfile_t*)); ! 117: extern int sfungetc _SFA_((Sfile_t*, int)); ! 118: extern char *_sfcvt _SFA_((double, int, int*, int*, int)); ! 119: extern int sfprintf _SFA_((Sfile_t*, const char*, ...)); ! 120: extern int sfsprintf _SFA_((char*, int, const char*, ...)); ! 121: extern int sfscanf _SFA_((Sfile_t*, const char*, ...)); ! 122: extern int sfsscanf _SFA_((const char*, const char*, ...)); ! 123: ! 124: #if __STDC__ || __cplusplus ! 125: #include <stdarg.h> ! 126: #endif ! 127: extern int sfvprintf _SFA_((Sfile_t*, const char*, va_list)); ! 128: extern int sfvscanf _SFA_((Sfile_t*, const char*, va_list)); ! 129: ! 130: /* function analogues of fast in-line functions */ ! 131: extern int sfgetc _SFA_((Sfile_t*)); ! 132: extern long sfgetl _SFA_((Sfile_t*)); ! 133: extern unsigned long sfgetu _SFA_((Sfile_t*)); ! 134: extern int sfputc _SFA_((Sfile_t*,int)); ! 135: extern int sfputd _SFA_((Sfile_t*,double)); ! 136: extern int sfputl _SFA_((Sfile_t*,long)); ! 137: extern int sfputu _SFA_((Sfile_t*,unsigned long)); ! 138: extern int sfpeek _SFA_((Sfile_t*, unsigned char**)); ! 139: extern int sfsync _SFA_((Sfile_t*)); ! 140: extern Sfile_t* sfpushed _SFA_((Sfile_t*)); ! 141: extern Sfile_t* sftmp _SFA_((int)); ! 142: extern int sfslen _SFA_((void)); ! 143: extern int sfulen _SFA_((unsigned long)); ! 144: extern long sforigin _SFA_((Sfile_t*)); ! 145: extern int sfclearerr _SFA_((Sfile_t*)); ! 146: extern int sfeof _SFA_((Sfile_t*)); ! 147: extern int sferror _SFA_((Sfile_t*)); ! 148: extern int sffileno _SFA_((Sfile_t*)); ! 149: extern char* sfecvt _SFA_((double,int,int*,int*)); ! 150: extern char* sffcvt _SFA_((double,int,int*,int*)); ! 151: ! 152: #if __cplusplus ! 153: } ! 154: #endif ! 155: ! 156: /* fast in-line functions */ ! 157: #define sfputc(f,c) ((f)->next >= (f)->endw ? \ ! 158: _sfflsbuf(f,(int)((unsigned char)(c))) : \ ! 159: (int)(*(f)->next++ = (unsigned char)(c))) ! 160: #define sfgetc(f) ((f)->next >= (f)->endr ? _sffilbuf(f,1) : (int)(*(f)->next++)) ! 161: #define sfslen() (_Sfi) ! 162: #define sffileno(f) ((f)->file) ! 163: #define sforigin(f) (((f)->flags&SF_STRING) ? 0L : (f)->orig) ! 164: #define sfeof(f) (((f)->flags&(SF_EOF|SF_STRING)) && (f)->next >= (f)->endb) ! 165: #define sferror(f) ((f)->flags&SF_ERROR) ! 166: #define sfclearerr(f) ((f)->flags &= ~(SF_ERROR|SF_EOF)) ! 167: #define sfpushed(f) ((f)->push) ! 168: #define sftmp(n) ((n) >= 0 ? _sftmpfile(n) : \ ! 169: sfnew((Sfile_t*)0,(unsigned char*)0,-1,-1, \ ! 170: SF_READ|SF_WRITE|SF_STRING)) ! 171: ! 172: #define sfpeek(f,bufp) (((bufp) || \ ! 173: ((f)->flags&(SF_READ|SF_WRITE|SF_STRING)) == \ ! 174: (SF_READ|SF_WRITE|SF_STRING)) ? _sfpeek(f,bufp) : \ ! 175: ((f)->endb - (f)->next)) ! 176: #define sfsync(f) (((f) && (((Sfile_t*)(f))->flags&SF_STRING)) ? 0 : _sfsync(f)) ! 177: ! 178: /* coding long integers in a portable and compact fashion */ ! 179: #define SF_SBITS 6 ! 180: #define SF_UBITS 7 ! 181: #define SF_SIGN (1 << SF_SBITS) ! 182: #define SF_MORE (1 << SF_UBITS) ! 183: #define SF_U1 SF_MORE ! 184: #define SF_U2 (SF_U1*SF_U1) ! 185: #define SF_U3 (SF_U2*SF_U1) ! 186: #define SF_U4 (SF_U3*SF_U1) ! 187: #define sfulen(v) ((v) < SF_U1 ? 1 : (v) < SF_U2 ? 2 : \ ! 188: (v) < SF_U3 ? 3 : (v) < SF_U4 ? 4 : 5) ! 189: #define sfgetu(f) ((_Sfi = sfgetc(f)) < 0 ? -1 : \ ! 190: ((_Sfi&SF_MORE) ? _sfgetu(f) : (unsigned long)_Sfi)) ! 191: #define sfgetl(f) ((_Sfi = sfgetc(f)) < 0 ? -1 : \ ! 192: ((_Sfi&(SF_MORE|SF_SIGN)) ? _sfgetl(f) : (long)_Sfi)) ! 193: #define sfputu(f,v) _sfputu((f),(unsigned long)(v)) ! 194: #define sfputl(f,v) _sfputl((f),(long)(v)) ! 195: #define sfputd(f,v) _sfputd((f),(double)(v)) ! 196: ! 197: #define sfecvt(v,n,d,s) _sfcvt((v),(n),(d),(s),1) ! 198: #define sffcvt(v,n,d,s) _sfcvt((v),(n),(d),(s),0) ! 199: ! 200: #endif /* _SFIO_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.