Listing 1 The header <fstream>

// fstream standard header
#ifndef _FSTREAM_
#define _FSTREAM_
#include <istream>
#include <ostream>
              // class filebuf
struct _Filet;
class filebuf : public streambuf {
public:
       filebuf(_Filet *_F = 0)
              {_Init(_F); }
       filebuf(ios::_Uninitialized)
              : streambuf(ios::_Noinit) {}
       virtual ~filebuf();
       bool is_open() const
              {return ((_File != 0)); }
       filebuf *open(const char *, ios::openmode);
       filebuf *open(const char *_N, ios::open_mode _M)
              {return (open(_N, (ios::openmode)_M)); }
       filebuf *close();
protected:
       virtual int overflow(int = EOF);
       virtual int pbackfail(int = EOF);
       virtual int underflow();
       virtual int uflow();
       virtual streamsize xsgetn(char *, streamsize);
       virtual streamsize xsputn(const char *, streamsize);
       virtual streampos seekoff(streamoff, ios::seekdir,
              ios::openmode = (ios::openmode)(ios::in | ios::out));
       virtual streampos seekpos(streampos,
              ios::openmode = (ios::openmode)(ios::in | ios::out));
       virtual streambuf *setbuf(char *, streamsize);
       virtual in sync();
       _Filet *_Init(_Filet * = 0, bool = 0);
private:
       bool _Closef;
       _Filet *_File;
       };
              // class ifstream
class ifstream : public istream {
public:
       ifstream()
              : istream(&_Fb) {}
       ifstream(const char *_S, openmode _M = in)
              : istream(&_Fb) {_Fb.open(_S, _M); }
       virtual ~ifstream();
       filebuf *rdbuf() const
              {return ((filebuf *)&_Fb); }
       bool is_open() const
              {return (_Fb.is_open()); }
       void open(const char *_S, openmode _M = in)
              {if (_Fb.open(_S, _M) == 0)
                     setstate(failbit): }
       void open(const char *_S, open_mode _M)
              {open(_S, (openmode)_M); }
       void close()
              {if (_Fb.close() == 0)
                     setstate(failbit); }
private:
       filebuf _Fb;
       };
              // class ofstream
class ofstream : public ostream {
public:
       ofstream()
              : ostream(&_Fb) {}
       ofstream(const char *_S, openmode _M = out | trunc)
              : ostream(&_Fb) {_Fb.open(_S, _M); }
       virtual ~ofstream();
       filebuf *rdbuf() const
              {return ((filebuf *)&_Fb); }
       bool is_open() const
              {return (_Fb.is_open()); }
       void open(const char *_S, openmode _M = out | trunc)
              {if (_Fb.open(_S, _M) == 0)
                     setstate(failbit); }
       void open(const char *_S, open_mode _M)
              {open(_S, (openmode)_M); }
       void close()
              {if (_Fb.close() == 0)
                     setstate(failbit); }
private:
       filebuf _Fb;
       };
              // class stdiobuf
class stdiobuf : public filebuf {
public:
       stdiobuf(_Filet *_F)
              : filebuf(_F), _Is_buffered(0) {}
       virtual ~stdiobuf();
       bool buffered() const
              {return (_Is_buffered); }
       void buffered(bool _F)
              {Is_buffered = _F; }
private:
       bool _Is_buffered;
       };
              // class istdiostream
class istdiostream : public istream {
public:
       istdiostream(_Filet *_F)
              : istream(&_Fb), _Fb(_F) {}
       virtual ~istdiostream();
       stdiobuf *rdbuf() const
              {return ((stdiobuf *)&_Fb); }
       bool buffered() const
              {return (_Fb.buffered()); }
       void buffered(bool _F)
              {_Fb.buffered(F); }
private:
       stdiobuf _Fb;
       };
              // class ostdiostream
class ostdiostream : public ostream {
public:
       ostdiostream(_Filet *_F)
              : ostream(&_Fb), _Fb(_F) {}
       virtual ~ostdiostream();
       stdiobuf *rdbuf() const
              {return ((stdiobuf *)&_Fb); }
       bool buffered() const
              {return (_Fb.buffered()); }
       void buffered(bool _F)
              {_Fb.buffered(_F); }
private:
       stdiobuf _Fb;
       };
#endif /* _FSTREAM_ */