/* Release 3.10 */ /*-------------------------------------------------------------------------* * * * FSTREAM.HPP - header file for file stream input and output. * * * * COPYRIGHT (C) 1990..1992 Clarion Software Corporation * * All Rights Reserved * * * *--------------------------------------------------------------------------*/ #include #ifndef __FSTREAM_INC_ #define __FSTREAM_INC_ #include class filebuf : public streambuf { public: static const int openprot; filebuf(); filebuf(int); filebuf(int _f, char*, int); ~filebuf(); int is_open(); int fd(); filebuf* open(const char*, int, int = filebuf::openprot); filebuf* close(); filebuf* attach(int); virtual int overflow(int = EOF); virtual int underflow(); virtual int sync(); virtual streampos seekoff(streamoff, ios::seek_dir, int); virtual streambuf* setbuf(char*, int); protected: int last_op(); int xfd; int mode; short opened; streampos last_seek; char* in_start; char lahead[2]; }; inline int filebuf::is_open() { return opened; } inline int filebuf::fd() { return xfd; } class fstreambase : virtual public ios { public: fstreambase(); fstreambase(const char*, int, int = filebuf::openprot); fstreambase(int); fstreambase(int _f, char*, int); ~fstreambase(); void open(const char*, int, int = filebuf::openprot); void attach(int); void close(); void setbuf(char*, int); filebuf* rdbuf(); private: filebuf buf; }; inline filebuf* fstreambase::rdbuf() { return &buf; } class ifstream : public fstreambase, public istream { public: ifstream(); ifstream(const char*, int = ios::in, int = filebuf::openprot); ifstream(int); ifstream(int _f, char*, int); ~ifstream(); filebuf* rdbuf(); void open(const char*, int = ios::in, int = filebuf::openprot); }; inline filebuf* ifstream::rdbuf() { return fstreambase::rdbuf(); } inline void ifstream::open(const char* name, int m, int prot) { fstreambase::open(name, m | ios::in, prot); } class ofstream : public fstreambase, public ostream { public: ofstream(); ofstream(const char*, int = ios::out, int = filebuf::openprot); ofstream(int); ofstream(int _f, char*, int); ~ofstream(); filebuf* rdbuf(); void open(const char*, int = ios::out, int = filebuf::openprot); }; inline filebuf* ofstream::rdbuf() { return fstreambase::rdbuf(); } inline void ofstream::open(const char* name, int m, int prot) { fstreambase::open(name, m | ios::out, prot); } class fstream : public fstreambase, public iostream { public: fstream(); fstream(const char*, int, int = filebuf::openprot); fstream(int); fstream(int _f, char*, int); ~fstream(); filebuf* rdbuf(); void open(const char *, int, int = filebuf::openprot); }; inline filebuf* fstream::rdbuf() { return fstreambase::rdbuf(); } inline void fstream::open(const char* name, int m, int prot) { fstreambase::open(name, m, prot); } #endif